• 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
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Quartz.Net 学习随手记之04 构建Windows Service承载服务
    Quartz.Net 学习随手记之03 配置文件
    SQL Server问题之计算机名称更改后无法登陆本地数据库
    SQL Server问题之The remote procedure call failed. [0x800706be]
    跨框架菜单menuG5使用
    DLink 524M经常断线、掉线问题的解决
    MSChart使用导航之开发
    ReSharper制作Template帮助我们快速输入代码
    网站右下角弹出通知效果的制作
    Dell6400拆卸与维护
  • 原文地址:https://www.cnblogs.com/wcat/p/10052816.html
Copyright © 2020-2023  润新知