Linux下gcc编译c文件为可执行文件分为四个步骤: 分别是 预编译、编译、汇编、链接。

1、预编译( 生成 hello.i 文件)

预编译的处理规则:

1. 将所有的 “#define” 删除,并展开所有的宏定义。
        2. 处理所有的条件预编译指令,比如:" #if #ifdef #elif #else #endif "。
        3. 处理所有的 “#include” 预编译指令。
        4. 删除所有的注释 “//” 、 “/* */”。
        5. 添加行号和文件名标识,以便编译时产生的行号信息以及用于编译错误或警告时能够显示行号。
        6. 保留所有的 “#pragma” 编译器指令。

$ gcc -E hello.c -o hello.i 或者 $ gcc  hello.c > hello.i

2、编译(生成汇编代码 hello.s)

编译过程是编译器gcc把预处理完的文件进行词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。

编译过程可以使用如下命令:

$ gcc -S hello.i -o hello.s 或者 $ gcc -S hello.c -o hello.s

都可以得到汇编输出文件 hello.s

3、汇编(生成hello.o文件)

汇编是 汇编器as 把汇编代码转变成中间目标文件。
        汇编过程可以使用如下命令:

 $ gcc -c hello.s -o hello.o 或者 $ gcc -S hello.c -o hello.o

可以得到中间目标文件

4、链接(生成可执行程序)

链接器 ld:负责将程序的目标文件与所需的所有附加的目标文件连接起来,附加的目标文件包括静态连接库和动态连接库。

链接是链接器ld把中间目标文件和相应的库一起链接成为可执行文件。

$ gcc hello.o -o hello

如果前面使用的是$ gcc hello.c命令,默认会产生一个a.out 的可执行文件,使用命令./a.out执行改可执行文件。

注:上述步骤可以放在一起执行

$ gcc hello.c -o hello
./hello

linux下gcc编译c文件生成可执行文件的四个步骤相关推荐

  1. Linux下gcc编译c程序生成可执行文件的过程

    Linux下gcc编译c程序生成可执行文件 一.准备 hello.c 文件 1.在当前目录下新建c文件 $:vim hello.c 2.按i进入编辑模式.按esc退出编辑模式,输入源代码 #inclu ...

  2. Tips--windows系统下gcc编译C文件为so共享库

    windows系统下gcc编译C文件为so共享库 1. windows系统安装gcc编译工具 2. 利用gcc编译多个c文件 3. 利用python工具验证生成的so共享库 1. windows系统安 ...

  3. Linux系统怎么编译sin,linux下gcc编译sin函数出错的问题

    linux下gcc编译sin函数出错的问题 收藏 Q: I keep getting errors due to library functions being undefined, but I'm ...

  4. linux系统gcc编译.c文件没有标准库解决

    linux系统gcc编译.c文件没有标准库解决 现象描述 解决过程 总结 现象描述 当安装好linux系统后(比如ubuntu),通过gcc -v 查看gcc编译器版本已经是最新的了,然后gcc a. ...

  5. Linux下gcc编译中关于头文件与库文件搜索路径相关问题

    如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:) 原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631 ========== ...

  6. vs编译c语言文件不读取对象式宏,C代码的条编译宏windows的VS和linux下gcc编译不一样...

    #include #include #define XXX 2 #define YYY 20 int main() { #if(XXX > 10) printf("XXX > 1 ...

  7. 浅析Linux下gcc编译过程

    目录 1. gcc简介及基本用法 2. gcc编译过程 3. 静态链接和动态链接 4. 静态库和动态库 4.1 静态库的制作和使用 4.2 动态库的制作和使用 1. gcc简介及基本用法   GCC( ...

  8. linux下gcc编译的四个步骤,linux:gcc编译程序的四个阶段

    gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) gcc指令的一般格式为:gcc [选项 ...

  9. Linux下gcc中各种文件后缀说明

    说明: .c C语言源文件 .a 由目标文件构成的档案库文件 .C .cc或.cxx C++源代码文件 .h 头文件 .i 已经经过预处理的C源代码 .ii 已经预处理的C++源代码 .m Objec ...

最新文章

  1. 「技术综述」如何降低遮挡对人脸识别的影响
  2. Could not find a version that satisfies the requirement pyspider (from versions: ) No matching distr
  3. hdu4966 最小树形图(最少辅导花费)
  4. 笔记-项目进度管理-复习要点
  5. 深入理解Java中异常体系
  6. 软件工程概论 课堂练习 第2次作业5【顺序图思考题——绘制手机拨号顺序图】
  7. Jerry给人做培训的记录
  8. cisco交换机堆叠
  9. [Leetcode Week15]Populating Next Right Pointers in Each Node
  10. .net post xml 数据
  11. php tire树,Immutable.js源码之List 类型的详细解析(附示例)
  12. 机器学习 - 随机森林手动10 折交叉验证
  13. [uboot]在uboot里面添加环境变量使用run来执行
  14. mina的HTTP性能测试
  15. 九章算术卷第三 衰分
  16. 家长的爱-爱对了吗? - 刘浩霖
  17. LeaRun快速开发平台,.Net Core加持,功能更全面
  18. 搭建教育直播平台,对教育机构有什么优势?
  19. android ios mp4格式转换,爱思助手怎么转换视频格式 爱思助手将普通视频格式转换为mp4格式方法...
  20. 4和2大于号小于号箭头那边_小于号怎么打键盘(大于小于号怎么区分)

热门文章

  1. Python开发亚马逊关键词获取工具
  2. 使用SQLite更改表的内容不成功
  3. 吉客云与金蝶云星空对接集成分页查询出库单连通采购退货新增(JackYun-采购退料OK)
  4. Video Copilot Reflect for Mac(AE倒影插件)
  5. 数据挖掘导论 笔记4
  6. EWF(Enhanced write Filter)
  7. 01_MySQL基础笔记
  8. Python第十四日
  9. Visual Basic了解
  10. Matlab中读取txt文件的几种方法