linux 编译程序的四个过程
一、预编译
他的命令是gcc -E main.c -o main.o 假设当前要编译的文件是main.c
1.将所有的#define删除,并展开所有的宏定义;
2.处理所有的预编译指令,例如:#if,#elif,#else,#endif;
3.处理#include预编译指令,将被包含的文件插入到预编译指令的位置;
4.添加行号信息文件名标识,便于调试;
5.删除所有的注释:
6.保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是
指示编译器完成一些特定的动作。
生成.i文件。
包括去注释 ,宏替换 ,头文件展开,条件编译
经编译后的.i文件不包含任何宏定义,因为所有的宏已经被展开,并且包含的文件已经被插入到.文件中
二、编译:C语言——》汇编
他的命令是:gcc -s main.i -o main.s
1.扫描,语法分析,语义分析,源代码优化,目标代码生成,目标代码优化;
2.生成汇编代码;
3.汇总符号;
4.生成.s文件
三、汇编:汇编——》二进制
他的命令是:gcc -c main.s -o main.o
1.根据汇编指令和特定平台,把汇编指令翻译成二进制形式;
2.合并各个section,合并符号表;
3.生成.o文件
四、链接
1.合并各个.obj文件的section,合并符号表,进行符号解析;
2.符号地址重定位;
3.生成可执行文件
也可以从c源代码开始经过预处理,编译,汇编,链接直接输出可执行文件
他的命令是:gcc -c main.s -o main.o
转载于:https://www.cnblogs.com/smile-812/p/7723545.html
linux 编译程序的四个过程相关推荐
- 了解“预编译、编译、汇编、链接”这四个过程对你有很大帮
转自:胡薇 了解"预编译.编译.汇编.链接"这四个过程对你有很大帮助-电子发烧友网 如有侵权,告知立马删除 补充:C语言条件编译及编译预处理阶段 - Rusty's code - ...
- Linux下Nginx编译安装过程详解
Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...
- C++ —— C++程序编译的四个过程
C++ -- C++程序编译的四个过程 g++是Linux下C++的编译器:我为什么会选择Linux下的g++编译器,就是因为g++可以看到程序从编译到运行的过程做了些什么.而VS等集成开发环境看不到 ...
- 从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接
从C源代码到可执行文件的四个过程:预处理.编译.汇编.链接 总览 我们将在Linux操作系统中,以C语言的Hello World程序为例,用gcc编译器分步执行这四个步骤. 我们有再熟悉不过的Hell ...
- Linux学习笔记(四)
压缩和解压缩 zip和unzip命令 语法格式为:zip[选项] 参数 zip命令 可以用来解压缩文件,或者对文件进行打包操作.zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有". ...
- Linux开机引导与关机过程
(转) Bootstrapping(引导) 是 Staring up a computer 的标准术语. 操作系统所提供的正常功能在启动过程中还不能使用,因此,计算机必须"通过其引导程序让自 ...
- Linux文件系统(四)文件缓存
Linux文件系统 Linux文件系统(一)文件系统概述 Linux文件系统(二)磁盘文件系统 Linux文件系统(三)虚拟文件系统 Linux文件系统(四)文件缓存 Linux文件系统(四)文件缓存 ...
- 转:记一次linux oom内存溢出排查过程
@转:记一次linux oom内存溢出排查过程 记一次linux oom内存溢出排查过程 2018年08月16日 14:13:49 enchanterblue 阅读数 4099更多 分类专栏: --- ...
- gcc编译的四个过程
gcc是什么? GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如li ...
- Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)
Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载) Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量, ...
最新文章
- 人工智能赋能智慧停车 准确预订车位
- 给初恋女孩的信....
- 【动态规划】[Uva11270]Tiling Dominoes
- [SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据
- CIKM2021推荐系统论文集锦
- mysql sql能力_MySQL SQL优化
- JVM垃圾收集器(2)
- 虚函数和虚析构函数的实现原理--虚函数表
- #简单统计学#加权平均数
- Hybrid 开发:JsBridge - Web 和客户端的桥
- 前端实战项目:前端框架Vue3.0项目教程(一)Vue3.0环境的搭建
- 基于Matlab交通信号标志识别
- Lectra力克公司发布新战略 助力客户打造“工业4.0”智造流程
- 数据处理可视化的最有价值的 50 张图 (上)
- DEVC++安装后编程运行时老是提示“源文件未编译”
- 公测与奥运同行,云服务总线CSB:“连”无边界
- 正则表达式(菜鸟教程)
- 商详压测jjmeter配置
- 中兴echat_公网对讲机都有哪些平台?
- 《C++最佳实践》翻译与阅读笔记