日期:2014-05-16 浏览次数:20759 次
Linux下的gcc(GNU C Compiler)是由GNU推出的功能十分强大的平台编译器,它可在多种硬体平台上编译出可执行程序,对于gcc的学习与掌握非常必要,因为gcc将会伴随我们整个的linux学习及开发过程。gcc可以降c,c++及汇编程序编译链接成可执行的文件。需要注意的是在linux中可执行文件没有统一的后缀,系统是从文件的属性来区分的,这一点跟window下是大不一样的。
那么gcc的源文件是否可以不管文件的后缀呢?答案是否定的,gcc是要通过后缀来区别输入文件的类别的,如:.c, .a(由目标文件构成的库文件),.C, .cc , .cxx(是C++源代码文件),.h(头文件),.i(已经预处理过的C源代码文件), .ii(已预处理过的c++源代码文件),.o(编译后的目标文件),.s(汇编源代码文件),.S(经过预汇编的汇编源文件);
gcc的编译过程可以分为四个阶段,即:预处理,编译,汇编,链接。
下面看一个简单的例子:
gcc常用编译选项:
1. -o(小o) 指定编译后的可执行文件名,默认为 XXX.out
2. -c 只编译,不会进行连接的.o文件,不可执行
3. -g 编译出可调试的程序,即如果我们需要对程序进行调试,则编译时必须带-g ,此时生成的文件将会大很多
4. - O 及-O2 对编译链接过程进行优化
5.-I(大i) 如-I/home/a 指定外加头文件目录 其实也可把自己做的头文件直接放在 /usr/include/下
6.-L 指定库所在路径,跟-I原理一样
7. -static 静态链接 , 即把库整合到程序中合成一个可执行文件 ,相比于动态库,则动态库只会在运行时动态地调用函数库。静态链接浪费空间,动态链接耗时。默认采用动态链接,但只要编译时加上-static选项就会进行静态链接。
8. -Wall : 生成所有警告信息 而 -w 则不生成任何警告信息
9. -D 相当于#define 进行宏定义。 如 gcc -DYES hello.c -o hello 这里定义了一个名为YES的宏