前言

请讲一下linux如何源文件逐步编译成可执行文件。

解答

首先先上图对编译的整个过程有个感性的认识,然后再逐步分析各个过程。 
以hello.c 程序为例

# include <stdio.h>
main{printf("hello\n");
}
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

一个.c源程序需要经过预处理器生成.i文件,再经过编译器生成.s文件,再经过汇编器生成可重定位目标文件.o文件,再与其他.o文件经过链接器生成最终的可执行目标程序。

  1. 预处理阶段。主要是处理源文件中以“#”开头的预编译指令。

    • 删除#define并展开宏
    • 处理所有条件预编译指令,如#if, #ifdef, #endif
    • 插入头文件到“#include”处
    • 删除所有注释
    • 添加行号和文件名标识,以便编译时编译器产生调试用的行号信息
    • 保留所有#pragma编译指令。
  2. 编译阶段。将预处理得到的预处理文件进行语法分析,词法分析,语义分析,优化后,生成汇编代码文件(汇编语言源程序)。
  3. 汇编阶段。利用汇编程序(汇编器)将汇编语言源程序转换成机器指令序列(机器语言程序)。
  4. 链接阶段。将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。
本文转自 http://blog.csdn.net/u013616945/article/details/77418365

Linux下如何将源文件逐步编译成目标文件的过程相关推荐

  1. Linux下将你的程序打包成run文件

    run文件就是一段脚本代码+文件 脚本代码负责将文件按照开发者思路进行配置,就像Windows下的安装包一样. |-----------------| | | | 安装脚本 | | | |------ ...

  2. Linux下c和cuda混合编译,并生成动态链接库.so和使用

    Linux下c和cuda混合编译,并生成动态链接库.so和使用 2016-08-27 14:27 98人阅读 评论(0) 收藏 举报 分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得 ...

  3. Linux下C语言程序的编译过程

    使用gcc编译程序时,编译工程分为4个阶段: (1)预处理:(Pre-Processing) (2)编译:(Compiling) (3)汇编:(Assembling) (4)链接:(linking) ...

  4. java 源码分析_Java 源代码编译成 Class 文件的过程分析

    原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...

  5. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  6. python文件编译为so_Mac上把python源文件编译成so文件

    把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...

  7. python编译so_Mac上把python源文件编译成so文件

    把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...

  8. jcreator把class字节码文件转成.java源文件_如何将.JAVA文件编译成.CLASS文件.说明方法和工具,或用JCreator如何操作?...

    http://www.newiter.com/showart.asp?id=33 由于比较长,建议点击上面链接进入继续浏览 对于很多应用系统,常常需要动态装载和执行类和代码片断,这有利于部署的简易性和 ...

  9. linux ant 编译,【Jenkins】linux下Jenkins集成ant进行编译并发送结果

    三个文章吧: 1 如何使用ant编译执行jmeter测试用例,并生成html报告 2 如何在Linux下搭建jenkins环境. 3 如何在Linux下搭建的jenkins中执行ant构建运行,并发送 ...

最新文章

  1. 调试笔记--jlink 变量转实时波形小技巧
  2. 一篇关于Maven项目的jar包Shell启动脚本
  3. 新华社报道关注松果出行:助力国家碳达峰碳中和目标
  4. golang安装beego报错:go: cannot use path@version syntax in GOPATH mode
  5. Linux网络编程——I/O复用之select详解
  6. bzoj1003题解
  7. 图片上传至服务器实现压缩
  8. php diff 文本比较,php文本操作方法集合比较
  9. Bootstrap 教程 之 Less 入门文档
  10. Dyn披露DDoS攻击细节:幕后是10万台的物联网设备僵尸网络
  11. lsi计算文档相似度
  12. 从零开始学习音视频编程技术(41) H.264播放器
  13. Scratch二次开发7:Scratch3.0作品的生命周期(各类状态)分析讲解
  14. Debian11新装系统美化
  15. win10关闭电池保护模式_win10系统Ie浏览器开启、关闭保护模式的操作方法
  16. 谷歌colab“几键”运行图像超分辨率模型-ESRGAN,操作详解
  17. 视频格式那么多,MP4/RMVB/MKV/AVI 等,这些视频格式与编码压缩标准 mpeg4,H.264.H.265 等有什么关系?...
  18. 常州abb机器人编程_ABB机器人编程程序解析
  19. 我真希望有人在我学计算机之前,就告诉了我这100多个程序员学习网站!【全编程人员都可以看】
  20. 弹幕调试 jquery.danmu.js

热门文章

  1. 百度影视播放器官方版
  2. VStart还是挺好用的
  3. spring boot缓存初体验
  4. 钉钉一键登录第三方网站
  5. Topview工作室考核
  6. BAT全球扩张AI路线图:百度早于谷歌,腾讯投资最多
  7. 泰迪云课堂《数据分析基础》ppt(上)
  8. fu811电子管参数_曙光电子管FU-811
  9. 第46届世界技能大赛网络系统管理项目湖北省选拔赛赛题-模块C-Cisco解题
  10. 用python画爱心表白代码