环境:Ubuntu12.04,GCC版本:4.6.3
一、GCC编译过程:
GCC是linux下最常用的C语言编译器,使用GCC编译程序经过四个阶段:预处理、编译、汇编、链接。
写了一个简单的hi.c,分步进行编译过程。
/*源程序hi.c*/
#include<stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
使用的gcc编译参数:
-E 仅作预处理,不进行编译、汇编和链接
-S 编译到汇编语言,不进行汇编和链接
-c 编译、汇编到目标代码,不进行链接
-o <file> 输出到 <文件>
1、预处理:GCC调用预处理程序cpp将会展开源文件中定义的宏,并向其中插入“/*include*/”语句所包含的内容,使用如下命令:
gcc -E hi.c -o hi.i
生成的hi.i中已经被加入了stdio.h的内容。
2、编译,汇编:GCC默认是将“.i”看成预处理后的C语言代码,执行下面的命令:
gcc -c hi.i -o hi.o
现在hi.i已经被编译成了目标文件hi.o。
3、链接:将目标文件链接成可执行文件,执行:
gcc hi.o -o hi
现在已经生成了可执行文件hi,可以执行:
./hi
会看到输出:hello world!
二、其他编译选项:
多个.c编译并生成可执行文件:
gcc eg1.c eg2.c -o eg
这条命令相当于:
gcc -c eg1.c -o eg1.o
gcc -c eg2.c -o eg2.o
gcc eg1.o eg2.o -o eg
在编译含多个源文件的工程时,只用一条GCC完成编译需要将每个源文件重新编译后全部链接,效率太低。所以需要灵活使用GCC,并借助make工具。