日期:2014-05-16  浏览次数:20714 次

Linux学习笔记五:gcc程序编译

    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的宏