gcc选项及规则

  • Post author:
  • Post category:其他



-pipe 利用管道优化编译过程


-M  递归打印文件所包含的头文件


-MM 打印头文件不递归


-E 预处理


-S 编译成汇编代码


-c  汇编成机器码


-v  查看执行细节


-g  增加调试信息


-o  指定输出文件名


-dM-E  查找某个宏定义


-Wall  打开所有警告


-Werror  所有警告认为是错误


-O0 不优化


-O/-O1


-O2


-O3


-llib  链接库


-L


-nostartfiles  不链接启动文件 在制作BootLoader 内核时使用


-nostdlib


-nostdinc


-static 在支持动态库的机器上,禁止链接动态库而采用静态方式链接


-shared 制作动态库


-Xlinker option 将参数传给连接器。gcc无法识别,故需选项参数分别制定

-Xlinker option

-Xlinker arg1

-Xlinker arg2







-Wl,option 把选项传给连接器  多个参数间用逗号隔开




-u symbol  使链接器认为取消了symbol符号的定义,从而链接器库模块以取得定义


-Idir 制定头文件搜索路径   -Idir1  -I-  -Idir2    dir1只能搜索 #include“file”   dir2可以搜索任意#include


-L  指定库文件搜索路径


-Bprefix  指定gcc所调用用具的前缀 ,未找到时,可使用GCC_EXEC_PREFIX环境变量


ld,arm-linux


-Ttext  startaddr  指定代码段起始地址


-Tdata dataaddr  指定数据段起始地址


-T bss  bssaddr   指定bss段起始地址




-m32 64位机器上产生32位代码




$@  目标


$<   第一个依赖


$^    所有依赖




-T指定链接脚本


链接脚本完整格式




SECTIONS {




secname start ALIGN(align) (NOLOAD) : AT(ldadr)

{ contents } >region :phdr =fill






}




secname 段名




start 重定位地址  对于位置相关代码,重定位地址必须为代码内实际地址



ALIGN(align) 起始地址对齐





(NOLOAD)运行时不需要加载







AT(ldadr)

指定此段位于映像文件中的地址,不指定时默认为运行地址







{ contents }  确定obj文件中哪些内容存入本段

















arm-linux-objcopy 被用来拷贝一个目标文件的内容到另一个文件中, 可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换





input-file  outfile指定输入输出文件名

-I   指定输入格式

-O  指定输出格式

-F   指定输入=输出格式

-R   sectionname   删掉sectionname段

-S  删除重定位信息和符号信息

-g  删除调试符号







arm-linux-objdump










-b   指定目标码格式









-d  反汇编可执行段









-D 反汇编所有段









-EB  指定大端字节序  -EL指定小段字节序









-f  显示文件的整体头部摘要信息









-h  显示目标文件各个段的头部摘要信息









-i   显示支持的目标文件格式和cpu架构









-j name  仅显示指定section的信息









-m machine  当待反汇编文件未指定架构信息时 手动指定





eg1  arm-linux-objdump -D  elf_file > dis_file


eg2  arm-linux-objdump -D -b binary -m arm bin_file > dis_file



arm-linux-objcopy




#define fastcall __attribute__((regparm(3)))


用于修饰函数 表示从寄存器获取参数




#define asmlinkage __attribute__((regparm(0)))


用于修饰函数 表示从堆栈获取参数


#define __weak __attribute__((weak))


用于修饰函数弱符号类型


遇强则强 无强弱顶



版权声明:本文为wenyaocn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。