GCC编译C源代码有四个步骤:预处理 > 编译 > 汇编 > 链接。
- 预处理:编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E。
gcc -E test.c -o test.i
生成预处理文件test.i - 编译:把代码翻译成汇编语言。可用gcc的参数-S。
gcc -S test.i -o test.S
生成汇编文件test.S - 汇编:把汇编文件生成二进制目标文件。可用gcc的参数-c。
gcc -c test.S -o test.o
生成目标文件test.o - 链接:把目标文件链接为可执行的文件。
gcc test.o -o test (-lc)
生成可执行文件test(-lc可有可无)
没有选项,gcc test.c 会生成一个可执行文件a.out
-o
意思是output,指定输出文件名称,[-o outfile]-c
意思是compile,只编译,不链接库文件。gcc -c test.c 会生成test.o的目标文件-S
意思是aSsemble,生成汇编文件。gcc -S test.c 会生成test.S汇编文件-E
意思是prEprocess,预处理c文件。gcc -E test.c 会把预处理结果进行标准输出(打印在屏幕上)-lm
链接到libm.so库文件,主要是math.h中的数学函数-lc
链接到libc.so库文件,这是gcc的默认选项,加不加都行。大部分库函数如printf()位于libc.so库文件中-O
意思是Optimize,基本优化。gcc -O test.c 生成经过优化的可执行文件a.out。-O2
最大优化。gcc -O2 test.c 生成最大优化的可执行文件a.out。-g
可以进行gbd调试。生成的可执行文件会比不加该选项时大一点。