Linux程序在预处理、编译、汇编、链接、运行步骤的作用
创建一个hello.c文件,按步骤操作:
一、预编译 <生成 hello.i文件 >
操作步骤:gcc -E hello.c -o hello.i
1.将所有的#define删除,并展开所有的宏定义;
2.处理所有的预编译指令,例如:#if,#elif,#else,#endif;
3.处理#include预编译指令,将被包含的文件插入到预编译指令的位置;
4.添加行号信息文件名信息,便于调试;
5.删除所有的注释:// /**/;
6.保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。
生成.i文件。
包括(1)去注释 (2)宏替换 (3)头文件展开 (4)条件编译
二、编译(高级语言——>汇编语言)<生成hello.s文件>
操作步骤:gcc -S hello.i -o hello.s
主要作用:1.扫描(词法分析),2.语法分析,3.语义分析,4.源代码优化(中间语言生成),5.代码生成,目标代码优化。
三、汇编(汇编语言——>二进制文件)<生成hello.o文件>
操作步骤:gcc -c hello.s -o hello.o
主要作用:汇编器是将汇编代码转变成可以执行的指令,生成 目标文件。
四、链接(生成exe文件)
操作步骤:gcc hello.o -o hello
主要作用:链接过程主要包括:地址和空间的分配,符号决议和重定位。
地址和空间:系统给函数、变量分配地址和空间。
符号决议:也可以说地址绑定,分动态链接和静态链接,
重定位:假设此时又两个文件:A,B。A需要B中的某个函数mov的地址,未链接前将地址置为0,当A与B链接后修改目标地址,完成重定位
五、运行
操作步骤:./hello
主要功能:运行程序
转载于:https://www.cnblogs.com/single-dont/p/11315980.html
Linux程序在预处理、编译、汇编、链接、运行步骤的作用相关推荐
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- C语言 程序的翻译 预处理 编译 汇编 链接 #define详解
1.程序的翻译环境和执行环境 执行环境:所在操作系统的平台 win10 win11 linux 翻译环境:MSVC gcc g++ 你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你 ...
- 编译+构建+链接+运行之间的关系分析
编译+构建+链接+运行之间的关系分析 源文件+编译+部署+测试+打包 Maven+default: 验证(validate)+编译(compile)+测试(test)+打包(package)+验证(v ...
- stm32启动过程、cortex-m3架构、堆栈代码位置、编译汇编链接分析
分析 一. 寄存器.架构.工作流程 1. 寄存器架构 二 .总线与各个部件之间的关系(主要是I-Code Bus.D-Code Bus.System Bus) 体系结构:哈佛结构与冯诺依曼结构的区别 ...
- linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用
链接参数控制 链接器中提供了-dn -dy 参数来控制使用的是动态库还是静态库,-dn表示后面使用的是静态库,-dy表示使用的是动态库 例: g++ -Lpath -Wl,-dn -lx -Wl,-d ...
- linux 编译配置文件,Linux程序源码编译安装的configure配置详解
Linux环境下,如果通过源代码编译安装程序的简单过程可以 描述为:./configure-->make-->make install.其中./configure配置脚本功能就是对你的系统 ...
- Linux程序源码编译安装的configure配置详解
Linux环境下,如果通过源代码编译安装程序的简单过程可以描述为:./configure–>make–>make install.其中./configure配置脚本功能就是对你的系统做很多 ...
- 让C/C++程序一次编译,到处运行 (仅限Linux)
本文不考虑静态链接方式,很多库在静态链接的时候会有问题,比如libunwind,它的异常处理API会和gcc原有的冲突.还有一个显著的问题就是nss.它根据配置文件/etc/nsswitch.conf ...
- 在linux通过源码编译安装redis详细步骤
1.下载源码包 [root@localhost opt]# wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解压缩redis ...
最新文章
- ISME:长期进化实验揭示脱硫弧菌的硝酸盐耐受机制
- 关于 #!/bin/bash脚本头文件的类型说明
- Jython调用不包含第三方库的python脚本
- 工作250:uniapp--实战--flex布局--星级评分
- 前端学习(2616):请求数据接口
- zabbix-将业务机器加入到监控中
- JavaSE复习(二)集合
- php快速排序分割两部分,php四大算法|冒泡排序|快速排序|二分查找
- 【图像融合】基于matlab curvelet变换图像融合(评价指标)【含Matlab源码 781期】
- 怎么把度分秒化成小数_excel中批量将经纬度度分秒转换成十进制小数点的方法介绍...
- python数据可视化代码示例
- wxpython 设置热键
- PE文件格式”1.9版 完整译文
- 有哪些简单好用的国产数据库?
- VRChat火了,但VR社交还没迎来最好的时代
- Oracle的深入学习
- #NameError: name ‘x‘ is not defined
- 寻找市场中的Alpha(上):WorldQuant的阿尔法设计理念
- win7怎么打开微软更新服务器地址,Win7旗舰版上的windows update服务无法启动
- FX5U和je-C伺服通讯案例和学习资料
热门文章
- git获取管理员权限 windows_win10不兼容git2.7.3+版本
- iis php 假死 nginx,网站假死 重启NGINX无效 必须重启PHP 原因分析
- 前端JavaScripts基础知识点讲义代码
- 等比数列求和python_python numpy生成等差数列、等比数列的实例
- 深入浅出KNN算法(二) sklearn KNN实践
- 《剑指offer》从尾到头打印链表
- 创业融资十项注意要点
- 利用 livy 远程提交 spark作业
- Scala学习之特殊符号,及函数
- Presenting the Permanent Generation