zoukankan      html  css  js  c++  java
  • 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目标文件生成动态库文件
  • 相关阅读:
    技术汇总:第四章:使用Easyui做三级下拉列表
    全文检索工具elasticsearch:第四章:开发电商的搜索列表功能
    全文检索工具elasticsearch:第三章: Java程序中的应用
    技术汇总:第三章:拖拉验证
    分布式部署:第三章:Docker、MySQL、tomcat、Nginx、Redis部署
    分布式部署:第二章:MyCat和Nginx部署
    分布式部署:第一章:zookeeper集群和solrcloud及redisCluster集群搭建
    技术汇总:第二章:JUC
    大型电商网站:第四章:业务功能与数据结构分析
    大型电商网站:第二章:项目开发介绍
  • 原文地址:https://www.cnblogs.com/chu-yi/p/9748150.html
Copyright © 2011-2022 走看看