Linux下GNU编译器


GNU编译器

在这里插入图片描述

1、支持众多编程语言、平台
2、构建过程(C代码是如何变成可执行文件的)。

    第一步,预处理. 这一步处理 头文件、条件编译指令和宏定义。

    第二步,编译. 将第一步产生的文件连同其他源文件一起编译成汇编代码。

    第三步,汇编。将第二步产生的汇编源码转换为 object file.

    第四步,链接. 将第三步产生的一些object file 链接成一个可执行的文件。

    预处理:把程序员所编译的C代码翻译成标准的C代码
    汇编:把预处理后的C代码翻译成汇编代码
    编译:把会标代码翻译成二进制指令
    链接:把若干个目标文件合并成一个可执行文件
3、gcc -v 查看版本
4、文件后缀
    .h   头文件
    .gch 头文件的编译结果,一般不要保留。
    .c   源文件
    .i   预处理文件
    .s   汇编文件
    .o   目标文件
    .a   静态库文件
    .so  共享库文件
5、参数
    -E  预处理
    -S  汇编
    -c  编译(只生成目标文件)
    -o  指定编译结果的名字
    -Wall   产生尽可能多的警告
    -Werror 把警告当作错误处理
    -x  指定编译的语言
    -g  生成调试信息
    -On 优化等级
    -D  编译时定义宏
    -l  链接里加库
    -I  指定头文件的查找路径,配置环境变量
        1、打开 vim ~/.bashrc
        2、在文件末尾,添加一行 export C_INCLUDE_PATH=$C_INCLUDE_PATH:NEW_PATH
        3、重新加载配置文件 source ~/.bashrc
        注意:如果要删除环境变量需要在~/.bashrc文件中删除环境变量后,退出终端重新打开。
        考题1:#include <> / #include "" 区别?
        考题2:头文件中可以编写哪些内容?
        考题3:头文件的作用?
            1、说明对应的.c文件的内容有哪些(声明函数、全局变量)。
            2、定义结构、联合、枚举、宏
            3、类型重定义
            虽然函数可以隐式声明,但并不一定准确,而且非常有可能造成严重错误。
6、预处理指令
    #include    文件包含,区别""和<>的区别
    #define     定义宏常量或宏函数
        #       把标识符转换成字符串
        ##      合并标识符
    #undef      删除宏
    #line       指定当前行的行号
    #if            条件编译
    #ifndef        常用于头文件卫士
    #ifdef        
    #elif
    #endif
    #error      在编译期间产生错误
    #warning    在编译期间产生警告
    #pragma
        #pragma GCC dependency "文件"  用于监控文件,防止所依赖的文件,修改后而不知道
        #pragma GCC poison 标识符      用于禁用某些标识符
        #pragma pack(n)                设置结构、联合的补齐和对齐字节数
            n的值必须比默认的要小
            对齐边界必须是2的较小次方

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思考:
头文件的作用是什么?
编译时头文件找不到怎么办?


Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Love丶伊卡洛斯 !
评论
 Previous
Linux下库、静态库、共享库 Linux下库、静态库、共享库
五、库库就是目标文件的集合,我们把不需要升级更新维护的代码打包合并在一起方便使用,也可以对源文件进行保密。 静态库在使用时是把被调用的代码复制到调用模块中,然后再执行程序时,静态库就不需要了。 静态库的执行速度快,但占用空间大,当库中的内容
2019-09-09
Next 
网络通信TCP/UDP 网络通信TCP/UDP
一、网络通信的基本概念1、TCP和UDP的区别 TCP(Transmission Control Protocol):传输控制协议,面向连接的服务(类似打电话),安全、可靠(三次握手、响应+重传、四次挥手),速度相对较慢,一般应用
  TOC