zoukankan      html  css  js  c++  java
  • linux应用程序设计--GCC程序编译

    GCC程序编译

    linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一般的编译器相比,平均效率要高20%~30%。

    GCC编译程序的四个阶段

    1. 预处理(Pre-Processing):编译器将C程序的头文件编译进来,还有完成宏的替换。
    2. 编译(Compiling):这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无误后,将程序编译成汇编语言。
    3. 汇编(Assembling):将汇编程序翻译成机器语言,也就是二进制程序。
    4. 链接(Linking):链接头文件中的函数所对应的函数库。例如:printf函数在stdio.h头文件中只是完成声明,要实现printf函数的功能,还需要链接到实际实现代码中去。

    GCC通过后缀来区分输入文件的类别

    .c

    C语言源代码文件

    .a

    是由目标文件构成的库文件

    .C,.cc或.cxx

    C++源代码文件

    .h

    头文件

    .i

    已预处理过的C源代码文件

    .ii

    已预处理过的C++源代码文件

    .o

    编译后的目标文件

    .s

    汇编语言源代码文件

    .S

    经过预编译的汇编语言源代码文件

    GCC用法

        gcc [options] [filenames]

        options : 编译器所需要的编译选项

        filenames : 要编译的文件名

        编译选项

        -o output_filename : 确定可执行文件的名称,如果不添加该选项,则给出默认执行文件xxx.out

        -c : 只编译,不链接成为可执行文件,生成.o目标文件

      

        -g : 产生调试工具(GNU的GDB)所必要的调试信息

        -O : 对程序进行优化编译、链接,产生的可执行文件的执行效率可以提高,但是编译、链接速度会降低

        -O2 : 比-O更好的优化编译、链接

        -I dirname : 将dirname所指出的目录加入到程序头文件目录列表中

        C程序中的头文件包含两种情况:

        #include <A.h>

        #include "B.h"

        对于<>,预处理程序cpp在系统预设的头文件目录中搜寻相应的文件

        对于"",cpp在当前目录中搜寻头文件,如果添加-I选项,并且在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。

     -L dirname : 将dirname所指定的目录加入到库文件的目录列表中。在默认情况下,连接程序ld在系统的预设路径中(/user/lib)寻找所需要的库文件,这个选项告诉链接程序,首先到-L指定的目录中去寻找,然后再到系统预设路径中寻找。

     -lname : 在连接时,装载名字为libname.a的函数库,该函数库的目录可以是系统预设或者由-L选项指定。

     -static : 静态链接库文件。当使用静态库时,链接器找出程序所需的函数,然后将它们拷贝到可执行文件中,此后将不需要静态程序库,但是静态链接占用空间大,所以linux下进行链接的缺省操作是链接动态库。

     -Wall : 生成所有警告信息

     -w : 不生成任何警告信息

     -DMACRO : 定义MACRO宏,等效于在程序中使用#define MACRO

    作者:Wcat
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    抽奖概率算法
    redis启动异常
    php如何快速读取大文件
    nginx反向代理解决跨域
    sublime修改侧边栏字体
    curl
    公众号开发一
    数组
    在windows下用vagrant建立lnmp开发环境
    gets--vs--fgets
  • 原文地址:https://www.cnblogs.com/wcat/p/10052816.html
Copyright © 2011-2022 走看看