创建一个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程序在预处理、编译、汇编、链接、运行步骤的作用相关推荐

  1. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  2. C语言 程序的翻译 预处理 编译 汇编 链接 #define详解

    1.程序的翻译环境和执行环境 执行环境:所在操作系统的平台 win10 win11 linux 翻译环境:MSVC gcc g++ 你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你 ...

  3. 编译+构建+链接+运行之间的关系分析

    编译+构建+链接+运行之间的关系分析 源文件+编译+部署+测试+打包 Maven+default: 验证(validate)+编译(compile)+测试(test)+打包(package)+验证(v ...

  4. stm32启动过程、cortex-m3架构、堆栈代码位置、编译汇编链接分析

    分析 一. 寄存器.架构.工作流程 1. 寄存器架构 二 .总线与各个部件之间的关系(主要是I-Code Bus.D-Code Bus.System Bus) 体系结构:哈佛结构与冯诺依曼结构的区别 ...

  5. linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用

    链接参数控制 链接器中提供了-dn -dy 参数来控制使用的是动态库还是静态库,-dn表示后面使用的是静态库,-dy表示使用的是动态库 例: g++ -Lpath -Wl,-dn -lx -Wl,-d ...

  6. linux 编译配置文件,Linux程序源码编译安装的configure配置详解

    Linux环境下,如果通过源代码编译安装程序的简单过程可以 描述为:./configure-->make-->make install.其中./configure配置脚本功能就是对你的系统 ...

  7. Linux程序源码编译安装的configure配置详解

    Linux环境下,如果通过源代码编译安装程序的简单过程可以描述为:./configure–>make–>make install.其中./configure配置脚本功能就是对你的系统做很多 ...

  8. 让C/C++程序一次编译,到处运行 (仅限Linux)

    本文不考虑静态链接方式,很多库在静态链接的时候会有问题,比如libunwind,它的异常处理API会和gcc原有的冲突.还有一个显著的问题就是nss.它根据配置文件/etc/nsswitch.conf ...

  9. 在linux通过源码编译安装redis详细步骤

    1.下载源码包 [root@localhost opt]# wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解压缩redis ...

最新文章

  1. ISME:长期进化实验揭示脱硫弧菌的硝酸盐耐受机制
  2. 关于 #!/bin/bash脚本头文件的类型说明
  3. Jython调用不包含第三方库的python脚本
  4. 工作250:uniapp--实战--flex布局--星级评分
  5. 前端学习(2616):请求数据接口
  6. zabbix-将业务机器加入到监控中
  7. JavaSE复习(二)集合
  8. php快速排序分割两部分,php四大算法|冒泡排序|快速排序|二分查找
  9. 【图像融合】基于matlab curvelet变换图像融合(评价指标)【含Matlab源码 781期】
  10. 怎么把度分秒化成小数_excel中批量将经纬度度分秒转换成十进制小数点的方法介绍...
  11. python数据可视化代码示例
  12. wxpython 设置热键
  13. PE文件格式”1.9版 完整译文
  14. 有哪些简单好用的国产数据库?
  15. VRChat火了,但VR社交还没迎来最好的时代
  16. Oracle的深入学习
  17. #NameError: name ‘x‘ is not defined
  18. 寻找市场中的Alpha(上):WorldQuant的阿尔法设计理念
  19. win7怎么打开微软更新服务器地址,Win7旗舰版上的windows update服务无法启动
  20. FX5U和je-C伺服通讯案例和学习资料

热门文章

  1. git获取管理员权限 windows_win10不兼容git2.7.3+版本
  2. iis php 假死 nginx,网站假死 重启NGINX无效 必须重启PHP 原因分析
  3. 前端JavaScripts基础知识点讲义代码
  4. 等比数列求和python_python numpy生成等差数列、等比数列的实例
  5. 深入浅出KNN算法(二) sklearn KNN实践
  6. 《剑指offer》从尾到头打印链表
  7. 创业融资十项注意要点
  8. 利用 livy 远程提交 spark作业
  9. Scala学习之特殊符号,及函数
  10. Presenting the Permanent Generation