Linux GCC 编译选项

一般选项(Overall Option)

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

-E
要求gcc仅作预处理,不进行编译、汇编和链接。

-c
编译、汇编到目标代码,不进行链接。

-o
输出到指定文件。如果没有指定,则输出到a.out。

语言选项(Language Option)

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

Linux gcc编译之-std选项 - 寒魔影 - 博客园 (cnblogs.com)

目录选项(Directory Option)

-ldir
把dir加入到搜索头文件的路径列表中。

-Ldir
把dir加入到搜索库文件的路径列表中。

预编译选项(Preprocessor Option)

-Dname=definition
定义预编译宏,名字name,值definition。

-Dname
定义预编译宏,名字name,值为1。

-M
告诉预处理器输出一个make rule,描述源代码文件依赖哪些文件。

链接选项(Linker Option)

-lx
进行链接时搜索名为libx.so的库

-shared
生成动态库

-static
生成静态库

-rdynamic
链接器将所有符号添加到动态符号表中,方便dlopen()等使用。
-rdynmaic 传递 -export-dynamic 给链接器,连接器将把所有的符号加入动态符号表(dynamic symbol table)
这是调试dlopen()加载的模块时需要的,不指定则连接器会删除不使用的符号。

-s
去除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小。

代码生成选项(Code Generation Option)

-fPIC
编译动态库时,要求产生与位置无关代码(Position-Independent Code)
-fPIC 要求编译器产生与位置无关代码,也就是代码中不使用绝对地址,而使用相对地址,因此加载器可以将它加载到内存任意位置并执行;
如果不使用-fPIC,产生的代码中包含绝对地址。加载器加载它时,要先重定位,重定位会修改代码段的内容,因此每个进程都生成这个代码段的一份拷贝。

-fvisibility=default | hidden
默认情况下,设置ELF镜像中符号的可见性为public或hidden
-fvisibility=hidden 可以显著地提高链接和加载共享库的性能,生成更加优化的代码,
提供近乎完美的API输出和防止符号碰撞。强烈建议在编译共享库的时候使用它。(对静态库没有效果)

警告选项(Warning Option)

-Wall
允许发出gcc提供的所有有用的报警信息

-Wextra
对所有合法但值得怀疑的表达式发出警告

-Werror
把告警信息当做错误信息对待

-pedantic
允许发出ANSI C标准所列的全部警告信息

调试选项(Debugging Option)

-g
产生带有调试信息的目标代码

-ggdb
生成gdb专 用的调试信息,会有一些gdb专用的扩展

-gdwarf-2
产生DWARF version2 的格式的调试信息

-g3
gcc编译的时候,会将扩展的debug 信息编译进二进制文件里面,包括宏定义信息。

编译时添加-gdwarf-2和-g3这两个参数就可以调试宏定义

优化选项(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相反

平台相关选项

-m32
int、long和指针是32位,产生代码在i386系统上运行

-m64
int为32位、long和指针是64位,产生代码x86-64架构上运行

-mx32
int、long和指针是32位,产生代码x86-64架构上运行

posted on 2023-06-02 06:42  寒魔影  阅读(298)  评论(0编辑  收藏  举报

导航