Linux下如何将源文件逐步编译成目标文件的过程
前言
请讲一下linux如何源文件逐步编译成可执行文件。
解答
首先先上图对编译的整个过程有个感性的认识,然后再逐步分析各个过程。
以hello.c 程序为例
# include <stdio.h>
main{printf("hello\n");
}
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
一个.c源程序需要经过预处理器生成.i文件,再经过编译器生成.s文件,再经过汇编器生成可重定位目标文件.o文件,再与其他.o文件经过链接器生成最终的可执行目标程序。
预处理阶段。主要是处理源文件中以“#”开头的预编译指令。
- 删除#define并展开宏
- 处理所有条件预编译指令,如#if, #ifdef, #endif
- 插入头文件到“#include”处
- 删除所有注释
- 添加行号和文件名标识,以便编译时编译器产生调试用的行号信息
- 保留所有#pragma编译指令。
- 编译阶段。将预处理得到的预处理文件进行语法分析,词法分析,语义分析,优化后,生成汇编代码文件(汇编语言源程序)。
- 汇编阶段。利用汇编程序(汇编器)将汇编语言源程序转换成机器指令序列(机器语言程序)。
- 链接阶段。将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。
Linux下如何将源文件逐步编译成目标文件的过程相关推荐
- Linux下将你的程序打包成run文件
run文件就是一段脚本代码+文件 脚本代码负责将文件按照开发者思路进行配置,就像Windows下的安装包一样. |-----------------| | | | 安装脚本 | | | |------ ...
- Linux下c和cuda混合编译,并生成动态链接库.so和使用
Linux下c和cuda混合编译,并生成动态链接库.so和使用 2016-08-27 14:27 98人阅读 评论(0) 收藏 举报 分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得 ...
- Linux下C语言程序的编译过程
使用gcc编译程序时,编译工程分为4个阶段: (1)预处理:(Pre-Processing) (2)编译:(Compiling) (3)汇编:(Assembling) (4)链接:(linking) ...
- java 源码分析_Java 源代码编译成 Class 文件的过程分析
原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...
- 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入
成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...
- python文件编译为so_Mac上把python源文件编译成so文件
把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...
- python编译so_Mac上把python源文件编译成so文件
把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...
- jcreator把class字节码文件转成.java源文件_如何将.JAVA文件编译成.CLASS文件.说明方法和工具,或用JCreator如何操作?...
http://www.newiter.com/showart.asp?id=33 由于比较长,建议点击上面链接进入继续浏览 对于很多应用系统,常常需要动态装载和执行类和代码片断,这有利于部署的简易性和 ...
- linux ant 编译,【Jenkins】linux下Jenkins集成ant进行编译并发送结果
三个文章吧: 1 如何使用ant编译执行jmeter测试用例,并生成html报告 2 如何在Linux下搭建jenkins环境. 3 如何在Linux下搭建的jenkins中执行ant构建运行,并发送 ...
最新文章
- 调试笔记--jlink 变量转实时波形小技巧
- 一篇关于Maven项目的jar包Shell启动脚本
- 新华社报道关注松果出行:助力国家碳达峰碳中和目标
- golang安装beego报错:go: cannot use path@version syntax in GOPATH mode
- Linux网络编程——I/O复用之select详解
- bzoj1003题解
- 图片上传至服务器实现压缩
- php diff 文本比较,php文本操作方法集合比较
- Bootstrap 教程 之 Less 入门文档
- Dyn披露DDoS攻击细节:幕后是10万台的物联网设备僵尸网络
- lsi计算文档相似度
- 从零开始学习音视频编程技术(41) H.264播放器
- Scratch二次开发7:Scratch3.0作品的生命周期(各类状态)分析讲解
- Debian11新装系统美化
- win10关闭电池保护模式_win10系统Ie浏览器开启、关闭保护模式的操作方法
- 谷歌colab“几键”运行图像超分辨率模型-ESRGAN,操作详解
- 视频格式那么多,MP4/RMVB/MKV/AVI 等,这些视频格式与编码压缩标准 mpeg4,H.264.H.265 等有什么关系?...
- 常州abb机器人编程_ABB机器人编程程序解析
- 我真希望有人在我学计算机之前,就告诉了我这100多个程序员学习网站!【全编程人员都可以看】
- 弹幕调试 jquery.danmu.js