GCC&G++
本文基于4.8.5版本
编译程度
- -c:预处理、编译和汇编,生成”.o”
- -S:预处理和编译,生成”.c”
- -E:预处理,不生成文件, 需要把结果重定向到一个文件
- -o:指定目标名称
- -pipe:使用管道代替编译中临时文件
- -x:指定语言
C/C++ 编译标准
- -ansi:以ansi c 标准编译
- -std=standard:指明编译标准(如C++11)
告警
- -w:禁止显示所有警告信息
- -Wall:打开所有警告选项
调试
- -g:在编译的时候,产生调试信息。
- -ggdb3:允许调试宏
优化
-O0:禁止优化
-O1/-O:尝试优化
- -O2:尽可能优化,但拒绝空间换时间
- -O3:尽可能优化,接受空间换时间
预定义
- -Dname:预定义一个名为name的宏,值为1
- -Dname=definition:预定义名为name,值为definition的宏
链接
- -llibrary & -l library:链接名为library的库
- -s:除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小
- -static:阻止与共享库的链接
- -shared:尽量使用动态库
- -T script:链接器脚本
- -Wl,option:链接器参数
-rpath=./
:指定链接库目录-Bsymbolic
:优先使用本地符号--hash-style=gnu
:查找符号的散列表的配置规则,有sysv、gnu和both,系统不同规则不同
- -shared-libgcc & -static-libgcc & -static-libstdc++:标准库的链接方式
搜索目录
-Idir:把dir加入到搜索头文件的路径列表中
-Ldir: 把dir加入到搜索库文件的路径列表中。
代码生成
- -fPIC & -fpic:生成位置无关的代码(动态库),对固定地址的访问都通过全局偏移表(GOT)来实现,-fPIC对GOT表大小无限制,fpic有
- -fPIE & -fpie:用来生成位置无关的可执行代码