GCC 编译选项

1. 一般选项 Overall Option

选项作用
-v打印命令到stderr
-E要求gcc仅作预处理,不进行编译、汇编和链接。
-c编译、汇编到目标代码,不进行链接。
-o输出到指定文件。如果没有指定,则输出到a.out。

-v 会打印编译过程的详细信息,如完全的编译选项(包括gcc内部添加的编译选项),如头文件目录的搜索顺序等。

2. 语言选项 Language Option

选项作用
-std=编译时遵循的语言标准,目前支持C/C++,如c99, c++0x等。

3. 目录选项 Directory Option

选项作用
-ldir把dir加入到搜索头文件的路径列表中。
-Ldir把dir加入到搜索库文件的路径列表中。

4. 预编译选项 Preprocessor Option

选项作用
-Dname=definition定义预编译宏,名字name,值definition。
-Dname定义预编译宏,名字name,值为1。
-M告诉预处理器输出一个make rule,描述源代码文件依赖哪些文件。

5. 链接选项 Linker Option

选项作用
-lx进行链接时搜索名为libx.so的库
-shared生成动态库
-static生成静态库
-rdynamic链接器将所有符号添加到动态符号表中,方便dlopen()等使用。
-s去除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小。
  • -rdynmaic 传递 -export-dynamic 给链接器,连接器将把所有的符号加入动态符号表(dynamic symbol table), 。这是调试dlopen()加载的模块时需要的。不指定则连接器会删除不使用的符号。

6. 代码生成选项 Code Generation Option

选项作用
-fPIC编译动态库时,要求产生与位置无关代码(Position-Independent Code)
-fvisibility=default | hidden默认情况下,设置ELF镜像中符号的可见性为public或hidden
  • -fvisibility=hidden可以显著地提高链接和加载共享库的性能,生成更加优化的代码,提供近乎完美的API输出和防止符号碰撞。强烈建议在编译共享库的时候使用它。

    • -fvisibility的缺省值是default。
  • -fPIC 要求编译器产生与位置无关代码,也就是代码中不使用绝对地址,而使用相对地址,因此加载器可以将它加载到内存任意位置并执行;

    • 如果不使用-fPIC,产生的代码中包含绝对地址。加载器加载它时,要先重定位,重定位会修改代码段的内容,因此每个进程都生成这个代码段的一份拷贝。

7. 警告选项 Warning Option

选项作用
-Wall允许发出gcc提供的所有有用的报警信息
-Wextra对所有合法但值得怀疑的表达式发出警告
-Werror把告警信息当做错误信息对待
-pedantic允许发出ANSI C标准所列的全部警告信息

8. 调试选项 Debugging Option

选项作用
-g产生带有调试信息的目标代码
-ggdb生成gdb专 用的调试信息,会有一些gdb专用的扩展
-gdwarf-2产生DWARF version2 的格式的调试信息

9. 优化选项 Optimization Option

选项作用
-O0不优化。这是缺省值
-O1尝试优化编译时间和可执行文件大小。
-O2尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。
-O3再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 。
-O等同与-O1
-Os对生成文件大小进行优化。打开 -O2 开的全部选项,除了会那些增加文件大小的。
-fomit-frame-pointer去掉所有函数SFP(Stack Frame Pointer),即在函数调用时不保存栈帧指针SFP。可以提高程序运行速度, 代价是不能通过backtrace进行调试。
-fno-omit-frame-pointer与-fno-omit-frame-pointer相反
  • -O1打开-fomit-frame-pointer选项

10. 平台相关选项

选项作用
-m32int、long和指针是32位,产生代码在i386系统上运行
-m64int为32位、long和指针是64位,产生代码x86-64架构上运行
-mx32int、long和指针是32位,产生代码x86-64架构上运行



 
链接:https://www.jianshu.com/p/e5967e46797b
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一口Linux

众筹植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值