gcc/g++编译过程
1、预处理,生成.i .ii的文件[预处理器]
2、将预处理后的文件转换成汇编语言,生成文件.s[编译器]
3、由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4、连接目标代码,生成可执行程序[链接器ld]
常用选项
| -c | 只编译并生成目标文件 |
| -DMACRO | 以字符串“1”定义MACRO宏,相当于#define macro |
| -DMACRO=DEFN | 以字符串“DEFN”定义MACRO宏,相当于#define macro=defn |
| -Umacro | 取消MACRO宏定义,相当于#undef macro |
| -C | 在预处理的时候, 不删除注释信息, 一般和-E使用, 有时候分析程序,用这个很方便 |
| -E | 只激活预处理,可将预处理定向到标准输出,gcc -E hello.c |
| -S | 只激活预处理和编译,就是指把文件编译成为汇编代码,生成.s文件 |
| -g | 生成调试信息 |
| -pipe | 使用管道代替编译中临时文件 |
| -L | 表示要连接的库所在的目录,g++ main.cpp -L/lib -lopencv |
| -llibrary | 指定编译的时候使用的库,gcc -lopencv main.c |
| -o FILE | 生成指定的输出文件,用在生成可执行文件时 |
| -O0 | 编译器没有优化 |
| -O或-O1 | 缺省值, 优化生成代码 |
| -O2 | 进一步优化 |
| -O3 | 优化级别最高,包括 inline 函数 |
| -fPIC | 表示编译为位置独立的代码,用于编译共享库 gcc -fPIC -c test.c |
| -fPIE | 表示编译为位置独立的代码,用于编译可执行文件 |
| -shared | 指定生成动态链接库 gcc -shared -o test.so test.o |
| -static | 指定生成静态链接库 |
| -w | 关闭编译时的警告 |
| -W | 类似-Wall,只显示编译器认为会出现错误的警告 |
| -Wall | 生成所有警告信息 |
| -ggdb | 此选项将尽可能的生成gdb 的可以使用的调试信息 |
| -Wl,options | 把参数(options)传递给链接器ld,如果options 中间有逗号,就将options分成多个选项,然后传递给链接程序 |
| -std=c,c++ | 确定编译语言的标准 |
版权声明:本文为weixin_43285563原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。