gcc编译过程:
在使用gcc编译程序时,编译过程分为4个阶段。
(1)预处理
(2)编译
(3)汇编
(4)链接
Linux程序员可以根据自己的需要让gcc在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。和其他常用的编译器一样,gcc也提供了灵活而强大的代码优化功能,利用它可以生成执行效率较高的代码。
gcc -E test.c -o test.i
编译阶段,输入的是中间文件 *.i,编译后生成汇编语言文件 *.s,
gcc -S test.i -o test.s
在 汇编阶段,输入的是 *.s,将转换为二进制代码 *.o,
gcc -c test.s -o test.o
最后在 链接阶段,将输入的二进制机器代码文件 *.o,汇集成一个可执行的二进制代码文件,
gcc test.o -o test
不要分解,一次即可编译成功:
gcc tets.c -o test
在使用gcc编译程序时,编译过程分为4个阶段。
(1)预处理
(2)编译
(3)汇编
(4)链接
Linux程序员可以根据自己的需要让gcc在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。和其他常用的编译器一样,gcc也提供了灵活而强大的代码优化功能,利用它可以生成执行效率较高的代码。
分解各阶段:
预处理阶段,输入的是 *.c,是对源代码的预处理,该阶段会生成一个中间文件 *.i,gcc -E test.c -o test.i
编译阶段,输入的是中间文件 *.i,编译后生成汇编语言文件 *.s,
gcc -S test.i -o test.s
在 汇编阶段,输入的是 *.s,将转换为二进制代码 *.o,
gcc -c test.s -o test.o
最后在 链接阶段,将输入的二进制机器代码文件 *.o,汇集成一个可执行的二进制代码文件,
gcc test.o -o test
不要分解,一次即可编译成功:
gcc tets.c -o test