GCC 编译选项
原创
©著作权归作者所有:来自51CTO博客作者一口Linux的原创作品,请联系作者获取转载授权,否则将追究法律责任
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 | 进行链接时搜索名为的库 |
-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 |
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. 平台相关选项
选项 | 作用 |
---|
-m32 | int、long和指针是32位,产生代码在i386系统上运行 |
-m64 | int为32位、long和指针是64位,产生代码x86-64架构上运行 |
-mx32 | int、long和指针是32位,产生代码x86-64架构上运行 |