GCC编译命令
1. GCC编译过程
GCC编译过程分为4个步骤:
(1)预处理:源文件(.c),生成(.i)
命令:gcc -e test.c -o test.i
(2)汇编:源文件(.i),生成(.s)
命令:gcc -s test.i -o test.s
(3)编译:源文件(.s),生成(.o)
命令:gcc -c test.s -o test.o
注意:gcc实现了把预处理/汇编/编译合并在一起的操作,只需执行命令:
gcc -c test.c -o test.o即可。
(4)链接:源文件(.o),生成(无后缀)
命令:gcc test.o test1.o -o test
注意:上述4个步骤也可以合成一步完成,只需执行命令:
gcc test.c -o test
2. 其他编译指令
(1)-w
不生成任何警告信息
(2)-pipe
使用管道代替编译中的临时文件,在使用非gnu汇编工具时,可能有些问题
(3)-m64
64位应用程序,对应的还有-m32
(4)-O
-O等同于-O1,指优化代码
优化代码命令总共有四个:
-O0:不优化代码
-O1/-O:优化代码
-O2:进一步优化
-O3:更进一步优化,包括inline函数
(5)-I
指定头文件路径
(6)-shared
产生共享动态库
(7)-fPIC
使用地址无关代码。PIC:position independent code.fpic的目的是什么?共享对象可能会被不同的进程加载到不同的位置上,如果共享对象中的指令使用了绝对地址,外部模块地址,那么在共享对象被加载时就必须根据相关模块的加载位置对这个地址做调整,也就是修改这些地址,让它在对应进程中能正确访问。
(8)-o
输出文件,可以是.i/.s/.o/.so等文件