学了很长时间的c和c++,对于gcc的用法还不是很清楚,只会用“gcc a.c -o a”这类的命令。至于预处理,编译,汇编,链接等过程不是十分清楚。前两天到图书馆借了本快速入门的书,学习了下,现在做个小小的总结。
编译的基本流程:
c(.c)和c++(.cc, .cpp, .cxx)的源文件 。
|| gcc -E a.c -o a.i // 如果不加-o参数,gcc会把处理过的源文件放到标准输出中
预处理后的源文件。c源文件预处理后后缀为.i, c++为.ii 。
|| gcc -S a.i //会在当前文件夹下生成a.s
编译后生成的汇编源代码。后缀为.s, .S 。
|| gcc -c a.s //只进行汇编生成目标文件,.o结尾的目标文件可以用(ar crv libabc.a a.o b.o c.o )打包成形如lib×××.a的静态库
目标文件与库文件进行链接,生成可执行文件。
||gcc a.o //在当前文件夹下生成a.out
基本的过程就是以上四步。其中任何一种状态,用gcc如果不加-c,-E,-S选项都会直接生成可执行文件,如果加上了选项,可以由之前任一状态生成所需要的文件(如gcc -S a.c 可以直接生成a.s,gcc -c a.i可以直接生成a.o )。如果是c++直接换用g++命令就行。
另外gcc -v可以输出编译过程的配置和版本信息。
gcc警告提示: (更多…)