首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何摆脱 C 代码中的 gcc 汇编程序警告“为 .init 设置不正确的节属性”?

要摆脱 C 代码中的 gcc 汇编程序警告“为 .init 设置不正确的节属性”,可以尝试以下方法:

  1. 更新 gcc 版本:确保您使用的是最新版本的 gcc 编译器,因为一些较旧的版本可能会产生这种警告。
  2. 更新链接器脚本:检查链接器脚本,确保 .init 节的属性正确设置。例如,您可以在链接器脚本中添加以下内容:
代码语言:txt
复制
.init :
{
    *(.init.text)
    *(.init.data)
}
  1. 使用 -Wno-error=attribute-warning 选项:在编译命令中添加此选项以忽略属性警告。例如:
代码语言:txt
复制
gcc -Wno-error=attribute-warning source.c -o output
  1. 更新汇编代码:检查您的汇编代码,确保 .init 节的属性正确设置。例如,您可以在汇编代码中添加以下内容:
代码语言:txt
复制
.section .init, "ax"
.global _start
_start:
    // Your initialization code here
  1. 禁用警告:如果您确定警告不会导致问题,可以在编译命令中添加 -Wno-attribute 选项以禁用属性警告。例如:
代码语言:txt
复制
gcc -Wno-attribute source.c -o output

通过尝试以上方法,您应该能够摆脱 C 代码中的 gcc 汇编程序警告“为 .init 设置不正确的节属性”。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

X86 寻址方式、AT&T 汇编语言相关知识、AT&T 与 Intel 汇编语言比较、gcc 嵌入式汇编

如果要使用GNC C 编译器gcc,就可以一步完成汇编和连接,例如: gcc -o example example.S 这里,example.S 是你汇编程序,输出文件(可执行文件)名为example...其中,扩展名必须大写S,这是因为,大写S 可以使gcc 自动识别汇编程序C 预处理命令,像#include、#define、#ifdef、#endif 等,也就是说,使用gcc 进行编译,你可以在汇编程序中使用...四、gcc 嵌入式汇编 在Linux 代码,有很多C 语言函数嵌入一段汇编语言程序段,这就是gcc 提供“asm”功能,例如在include/asm-i386/system.h 定义...,下面以system.h C 函数例,说明嵌入式汇编应用。...,汇编代码输出参数__limit(即%0),输入参数segment(即%1)。

3.1K00
  • linux 编译汇编,linux下汇编教程

    linux下汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用CC++编写程序很方便,但汇编源程序用于系统最基本初始化,如初始化堆栈指针、设置页表、操作 ARM协处理器等。...Linux 汇编程序标号 标号只能由a~z,A~Z,0~9,“.”,_等字符组成。...(1)编写CC++语言或汇编源程序 通常汇编源程序用于系统最基本初始化,如初始化堆栈指针、设置页表、操作ARM协处理器等。初始化完成后就可以跳转到C代码执行。...如笔者引导程序包括3个文件:init.s(汇编代码、初始化硬件)xmrecever.c(通信模块,采用Xmode协议)和flash.c(Flash擦写模块)。...C++源程序生成目标代码还包括.fini(析构函数代码)和. init(构造函数代码)等。

    3.5K31

    CC++生态工具链——gccg++编译器使用指南

    一,关于GCC GCC全称是GNU Compiler Collection,是GNU工具链一种。GCC不仅支持C/C++语言,还支持Fortran/Ada/Java等语言编译。...目标程序与静态库链接时,目标程序代码调用任何外部函数代码都会从静态库复制到最终可执行文件。...默认动态库搜索路径/usr/lib 实用程序:ldd 和 nm ldd:列出依赖动态库 nm:查看动态库/静态库函数 六,gcc/g++命令常见参数 命令格式 gcc [-c|..."#define macro" -Umacro #相当于C语言中"#undef macro" -undef #取消对任何非标准宏定义 警告与报错参数 -Wall #发出gcc提供所有有用报警信息...-Werror #将警告升级编译报错 -Wextra / -W #启用-Wall未启用额外警告位,对合法但值得怀疑代码发出警告 例如 -Wsign-compare -pendantic

    2.5K30

    Linux 程序编译过程详解

    本文将介绍如何将高层C/C++语言编写程序转换成为处理器能够执行二进制代码过程,包括四个步骤: 预处理(Preprocessing) 编译(Compilation) 汇编(Assembly) 链接...在windows静态库是以 .lib 后缀文件,共享库是以 .dll 后缀文件。在linux静态库是以.a后缀文件,共享库是以.so后缀文件。...,生成汇编程序 上述命令生成汇编程序hello.s代码片段如下所示,其全部汇编代码。...汇编 汇编过程调用对汇编代码进行处理,生成处理器能识别的指令,保存在后缀.o目标文件。...在Linux系统gcc编译链接时动态库搜索路径顺序通常:首先从gcc命令参数-L指定路径寻找;再从环境变量LIBRARY_PATH指定路径寻址;再从默认路径/lib、/usr/lib、/

    1.9K30

    Linux 程序编译过程来龙去脉

    本文将介绍如何将高层C/C++语言编写程序转换成为处理器能够执行二进制代码过程,包括四个步骤: 预处理(Preprocessing) 编译(Compilation) 汇编(Assembly)...GCC GCC(GNU C Compiler)是编译工具。本文所要介绍C/C++语言编写程序转换成为处理器能够执行二进制代码过程即由编译器完成。...在windows静态库是以 .lib 后缀文件,共享库是以 .dll 后缀文件。在linux静态库是以.a后缀文件,共享库是以.so后缀文件。...// GCC选项-S使GCC在执行完编译后停止,生成汇编程序 上述命令生成汇编程序hello.s代码片段如下所示,其全部汇编代码。...在Linux系统gcc编译链接时动态库搜索路径顺序通常:首先从gcc命令参数-L指定路径寻找;再从环境变量LIBRARY_PATH指定路径寻址;再从默认路径/lib、/usr/lib、/

    2.9K30

    Linux 程序编译过程详解

    本文将介绍如何将高层C/C++语言编写程序转换成为处理器能够执行二进制代码过程,包括四个步骤:预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking...在windows静态库是以 .lib 后缀文件,共享库是以 .dll 后缀文件。在linux静态库是以.a后缀文件,共享库是以.so后缀文件。...静态库和动态库不同点在于代码被载入时刻不同。静态库代码在编译过程已经被载入可执行程序,因此体积较大。共享库代码是在可执行程序运行时才载入内存,在编译过程仅简单引用,因此代码体积较小。...// GCC选项-S使GCC在执行完编译后停止,生成汇编程序上述命令生成汇编程序hello.s代码片段如下所示,其全部汇编代码。...在Linux系统gcc编译链接时动态库搜索路径顺序通常:首先从gcc命令参数-L指定路径寻找;再从环境变量LIBRARY_PATH指定路径寻址;再从默认路径/lib、/usr/lib、/

    1.9K30

    S3C2440④ | ARM-THUMB子程序调用规则ATPCS

    在GPIO实验,我们首先编写汇编程序操作寄存器点亮LED,奈何汇编语言可读性和可移植性太差,所以编写启动代码设置栈顶指针SP,然后调用C语言中main函数,转入C语言世界,由C语言访问控制寄存器...,点亮LED,程序可读性和可移植性大大提高,那么,我们可曾想过,在汇编语言中是如何来调用C语言入口函数main呢?...其实,对于ARM处理器,在ARM指令集汇编程序和THUMB指令集汇编程序制定了子程序调用规则 —— ATPCS规则,这个规则包括: 寄存器使用规则 数据栈使用规则 参数传递规则 1.寄存器使用规则...数据栈使用规则 ATPCS规定数据栈FD类型(Full Descending,满递减),即栈指针指向栈顶元素,并且向内存地址减小方向增长,操作时候对数据栈操作是8字对齐,使用stmdb/ldmia...arm-linux-gcc -c $(TARGET).c $(CFLAGS) -o $(TARGET).o start.o:start.s arm-linux-gcc -c start.s

    89120

    __attribute__机制介绍

    , 既运行$gcc –Wall –c attribute.c attribute后,则并不会输出任何警告信息。...事实上,const参数不能用在带有指针类型参数函数,因为该属性不但影响函数参数值,同样也影响到了参数指向数据,它可能会对代码本身产生严重甚至是不可恢复严重后果。...如果函数包含内联,而所有使用到该函数程序都要把该内联展开,这会额外地增加代码长度。如果要在C 代码中使用extern inline声明,必须提供这种函数可寻址形式。...拥有此类属性函数经常隐式用在程序初始化数据方面,这两个属性还没有在面向对象C实现。 8....取一个2次方值,使得该值大于等于6,则该值8,所以编译器将设置S类型对齐方式8字

    3K11

    gcc命令使用_c调用cmd并执行命令

    hello.i文件 编译 将预处理生成 hello.i 文件编译生成汇编程序 hello.s 汇编 汇编过程调用对汇编代码进行处理,生成处理器能识别的指令,保存在后缀.o 目标文件。...gcc hello.c -o hello 链接了许多其他动态库,主要是linux系统glibc 动态库 ELF文件分析 链接器链接后生成最终文件 ELF 格式可执行文件,一个 ELF...可执行文件通常 被链接不同段,常见段譬如.text、.data、.rodata、.bss 等段 .text:已编译程序指令代码段。...,但不是全部,事实上只有 ANSI/ISO C 语言标准要求进行编译器诊断 那些情况,才有可能被 GCC 发现并提出警告 b. gcc -Wall illcode.c -o illcode 使用它能够使...GCC 产生尽可能多警告信息 总结 静态库链接时搜索路径顺序: ld 会去找 GCC 命令参数-L 再找 gcc 环境变量 LIBRARY_PATH 再找内定目录 /lib /usr/lib

    1.8K40

    程序机器级表示

    (linux命令:gcc -Og -s hello.c) 汇编阶段:汇编器ss将汇编程序翻译成二进制机器语言,并把结果保存在以.o结尾二进制文件。...(linux命令:gcc -Og -c hello.c) 链接阶段:链接器ld将程序用到C语言类库函数汇编后代码合并到hello.o,得到可执行目标文件。...Inter使用术语“字(word)”表示16位数据类型,因此32位数“双字”,64位数“四字”。 大多数GCC生成汇编代码指令都有一个字符后缀,表明操作数大小。...过程机制构建需要实现下面的一到多个机制 传递控制:在进入过程Q时候,程序计数器必须被设置Q代码起始位置,然后返回时,要把程序程序计数器设置调用那一条语句。...汇编代码2c到34是开始swap函数调用做准备,把数据从栈复制到寄存器,执行函数调用。在反汇编汇编代码好像省略了printf函数调用。下面编译器编译.s文件。

    64610

    变量访问被ARM架构安排明明白白

    由上图可知,每存储1个int型全局变量需要「8个字节」, 「literal pool (文字池)占用4个字节」 literal pool本质就是ARM汇编语言代码一块用来存放常量数据而非可执行代码内存块...指令2字),所以就无法把这个4字常量数据编码在一条编译后指令。...此时,ARM编译器(编译C源程序)/汇编器(编译汇编程序) 就会在代码中分配一块内存,并把这个4字数据常量保存于此,之后,再使用一条指令把这个4 字节数字常量加载到寄存器参与运算。...在C代码,文字池分配是由编译器在编译时自行安排,在进行汇编程序设计时,开发者可以自己进行文字池分配,如果开发者没有进行文字池安排,那么汇编器就会代劳。 「bss段占用4个字节」 ?...将r2内容那个写入到r3对应指向内存,即xx标号对应内存 二、结构体代码反汇编 1.

    87030

    嵌入式ARM设计编程(四) ARM启动过程控制

    一、实验目的 (1) 掌握建立基本完整ARM 工程,包含启动代码C语言程序等; (2) 了解ARM启动过程,学会编写简单C 语言程序和汇编启动代码并进行调试; (3) 掌握如何指定代码入口地址与入口点...观察程序执行过程寄存器及存储器变化情况。 (2)实验过程请记录并思考以下内容: 1)如何建立异常矢量入口表? 2)如何在汇编语言中切换至C语言main函数?。...3)如何C语言中调用汇编语言函数,并完成参数传递? 4)汇编语言函数中用到寄存器如何保护与恢复,为什么要保护参考程序R11?...答:建立异常矢量入口表需要设置中断类型号,并且要设置中断服务子程序段地址,以根据异常矢量表进入不同模式中断程序。在实验程序也有定义: 2.如何在汇编语言中切换至C语言main函数?...答:由上代码可知,保证程序调用时参数正确传递,汇编程序设计要遵守ATPCS(ARM-Thumb Produce Call Standard),它是ARM程序和Thumb程序中子程序调用基本规则,目的是为了使单独编译

    1.5K21

    ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍

    用来编译 CC++代码。它支持内联和嵌入式汇编程序,还包括高级 SIMD 矢量化编译器。   ...它同样适用于链接小型,单文件,绝对汇编程序,因为它用于链接大型可重定位输入,多模块,C/C++ 或混合 C/ C++ 和汇编程序。...\arm \ src\elfutils下提供了 ielftool 源代码(Microsoft VisualStudio项目)。 如果对如何生成校验和或格式转换要求有特定要求,则可以相应地修改源代码。...This is the default behavior when no command line options are used.生成输入文件常规属性列表以及它包含ELF段和ELF。...GCC for ARM 各命令行工具与 GCC 各命令行工具都是对应,功能基本一致,仅仅是名字有些改变!

    12.4K34

    Arm放弃了自家汇编语法?改投GNU了?

    macro伪操作可以将一段代码定义一个整体,称为宏指令。然后就可以在程序通过宏指令多次调用该段代码。...4-5也可以用该行1条指令实现 通过ld命令将main.o、start.o链接生成start.elf,-Ttext 0x40008000表示设置代码段起始地址0x40008000 通过objcopy...,缩小了文件尺寸, clean目标 clean目标的执行语句,删除编译产生临时文件 【补充】 gcc代码优化级别,在 makefile 文件编译命令 4级 O0 -- O3 数字越大,优化程度越高...文件列表 main.c和start.s和上一一致。..._start设置成入口地址; . = 0x40008000: 把定位器符号置0x40008000(若不指定, 则该符号初始值0); .text : { .start.o(.text) *(.text

    2.2K30

    VV操作系统笔记(一)操作系统I SeeYou!!!!

    在我们编写内核过程,我们使用GRUB来启动我们内核。 至于为什么用GRUB,因为它可以设置多系统共存,这样的话你就可以打包多个系统内核同时存在并且启动镜像文件。...MBR,则会继续查找第二个磁盘(PS:启动顺序可以在BIOS界面中进行设置),一旦BootLoader程序被检测并加载内存,BIOS就将控制权交接给了BootLoader程序。...按照Mutileboot规范,内核必须在起始8KB(512字)包含这一个多引导项头(Multiboot header)。 而且,这个多引导项头里面必须有3个4字对齐块。...在汇编和C混合编程汇编程序要使用.global伪操作声明汇编程序全局函数,意即可被外部函数调用,同时C程序要使用extern声明要调用汇编语言程序。...= boot.o kernel.o %.o: %.c $(GCC) $(GCCPARAMS) $(CFLAGS) %.o: %.s $(ASM) $(ASPPARAMS) $(ASMFLAGS

    1.8K20

    S3C2440③ | GPIO实验

    实验1 —— 点亮一个LED 1.看原理图确定硬件如何连接 原理图中表示了芯片控制LED硬件电路以及芯片引脚与LED如何连接。 ? ? 2....看主芯片手册确定如何控制引脚 具体:如何让GPF4输出高低电平? ? 2.1.配置GPF4输出模式(GPFCON) ? 设置GPFCON寄存器第[9:8]位=0b01。...4.C程序访问寄存器控制LED 4.1.运行C程序前提——启动文件 C语言入口函数是main()函数,main函数由启动文件(刚上电时执行汇编程序)来调用; 在调用时会进行压栈操作,调用完毕进行出栈操作...、BL、B; 编写汇编程序基本格式; 2....在C语言方面,掌握了: 在启动文件中汇编是如何转入C语言:BL调用main函数; 调用函数需要大量使用栈,体现出启动时设置栈顶指针SP重要性; 使用C语言指针访问寄存器,使用C语言位操作语法改变寄存器数据

    1.2K30

    程序基本概念

    以Python例,程序员写代码文件(扩展名为 .py )在首次执行时被编译成字节码(Byte Code)文件(扩展名为 .pyc ),以后每次执行该程序时Python解释器直接解释执行字节码文件...出警告信息说明你程序写得不够规范,可能有Bug,虽然能编译生成可执行文件,但程序运行结果往往是不正确,例如上面的程序运行时出了一个段错误(Segmentation fault),段错误是程序崩溃(...有些不重要警告信息 gcc 默认是不提示,但这些警告信息也有可能表明程序中有Bug, 一个好习惯是打开gcc-Wall选项,让gcc提示所有的警告信息--不管是严重还是不严重--然后把这些问题从代码全部消灭...比如把上例 printf("Hello, world.\n"); 改成 printf(0); 然后编译运行: $ gcc main.c$ ....如果打开 -Wall 选项编译就会报警告了: $ gcc -Wall main.cmain.c: In function ‘main’:main.c:7:9: warning: null argument

    1.1K20
    领券