• GCC


    编译过程参数

    1,其本质就是一个编译器。

    gcc -o output

    gcc  -o  输出文件名  输入文件名  

    2.其编译过程实质可分为一下四部:

    类型 说明
    -E 预处理后即停止,不进行编译、汇编及连接
    -S 编译后即停止,不进行汇编及连接
    -c 编译或汇编源文件,但不进行连接
    -o file 指定输出文件file

    (1)预处理 【gcc -E】可以理解为替换,宏定义等,生成.i文件。

    (2)编译 (编译为汇编)【gcc -S】 生成.s文件   (处理关键字)

      (3)   汇编 【gcc -c】  由上步.s生成.o文件

      (4)   链接 【gcc -o】

    上述四部只能依次顺序进行(下一步奏的执行,上一步骤必须执行)。

    在预处理阶段,主要处理C语言源文件中的#ifdef、#include、以及#define等命令。在与处理过程中,GCC会忽略掉不需要预处理的输入文件,该阶段会生成中间文件*.i。

    3.常见错误

    (1)预处理出错

    #include “stdio.h” (“”优先从当前目录开始,一般适用于自定义头文件)

    #include "abc.h"   (<>从系统目录中查找 , 一般是 :/usr / inlcude)

    not find

    gcc -I 跟查找头文件的目录(指明头文件所在)eg: gcc -I ./a -o file a.c

    (2)编译错误

       主要为语法问题;

    4.预处理的使用

    #include   包含有文件

    #define   宏定义 (替换)

           #define  宏名   宏体  (宏体最好加括号);不进行语法检查

    常见系统预定义宏

    __FUNCTION__      函数名

    __LINE__                行号

    __FILE__                 文件名

    条件预处理

    #ifdef

    #else

    #endif    ;

    命令  :  gcc   -D  :(相当于在命令是人为加入预处理条件)

                  gcc -DABC1  ===   #define  ABC1

    ***************************************************************************

    宏展开下的#,##    (内核中使用较多)

    #   字符串化

    ##  链接字符

    #define  ABC(x)                 #x 

    #define DAY(x)                   myday##x

    ********************************************************************

    .a[libname.a]    静态链接库

    .so [libname.so]    动态链接库

    -static 静态编译
    -shared(默认)

    1,生成动态库文件

    2,进行动态编译

    -L dir 库文件搜索中添加路径
    -fPID 生成使用相对位置无关的目标代码,然后常用于使用gcc的-static选项从该PIC目标文件生成动态库文件
  • 相关阅读:
    对文件的操作
    三级菜单优化
    三级菜单项目
    对字符串的操作(一些重要的方法)
    四、saltstack如何管理对象?
    三、saltstack证书管理
    二、saltstack基础配置
    一、saltstack简介和安装
    set集合
    异常处理语法
  • 原文地址:https://www.cnblogs.com/chu-yi/p/9748150.html
Copyright © 2020-2023  润新知