将源程序变为可执行程序的过程
将源程序变为可执行程序的过程
高级语言---->汇编语言---->机器语言
更具体的变换细节
- 源代码:就是我们用C/C++写的代码,后缀名是
.c/.cpp
- 预处理器:它的作用有将我们导入的头文件展开,删除注释,替换宏等
- 预处理后源代码:就是经过预处理器处理过的代码,后缀名为
.i
它其实和第一步的源代码差不多,就是增加或替换了一些细节,还是我们可以看懂的c/c++
代码 - 编译器:它的作用就是将预处理后源代码转换为汇编代码
- 汇编代码: 就是经过编译器处理后的代码,后缀名为
.s
,这一步的代码如果有汇编基础,也可以看懂 - 汇编器: 它的作用就是将上一步的汇编代码转换为机器指令即二进制代码
- 目标代码: 就是经过汇编器处理后的代码,后缀名为
.o
,这一步的代码里面全是01的组合,基本看不懂 - 链接器: 它的作用是将目标代码与启动代码,库代码,其他目标代码(比如我们写了很多个源文件,就可以生成很多个目标代码)连接起来,组成一个完整的逻辑地址
- 可执行程序: 就是经过链接器后生成的代码,在linux中后缀名为
.out
,在window中后缀名为.exe
编译器和汇编器老是搞混,编译器是编译成汇编语言,汇编器才是编译成机器语言
- 源代码:就是我们用C/C++写的代码,后缀名是
在linux中常用的两种编译工具
gcc/g++
,其中gcc
常用来编译C语言程序,g++
用来编译c++语言程序。- 误区1:gcc只能编译c代码,g++只能编译c++代码(x) 其实两者都可以
- 后缀为.c的,gcc把它当作是c程序,而g++当作是c++程序
- 后缀为.cpp的,两者都会认为是c++程序,c++语法规则则更加严谨一些
- 编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和c++程序使用的库链接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接都用g++,这就给人一种错觉,好像cpp程序只能用g++
- 误区2: 编译只能用gcc,链接只能用g++
- 严格来说,这句话不算错,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++
- gcc命令不能自动和c++程序使用的库链接,所以通常用g++来完成链接。但是在编译阶段,g++会自动调用gcc,二者等价。
- 误区3:gcc不会定义 __cplusplus 宏,而g++会
- 实际上,这个宏只标志着编译器将会把代码按C还是C++语法来解释
- 如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则就是已定义的
- 误区1:gcc只能编译c代码,g++只能编译c++代码(x) 其实两者都可以
GCC常用参数选项
我们通常在linux中编译一个C程序的命令为
gcc test.c -o app
这句命令的作用就是将test.c源程序编译为一个可执行文件app,执行这个命令,在内部分别执行了-e,-c
命令大部分都是参考牛客网Linux系统编程https://www.nowcoder.com/study/live/504/1/8
将源程序变为可执行程序的过程相关推荐
- 源程序到可执行程序的编译过程
一份源代码,从开始产生到成为可执行程序的过程:预处理--编译--汇编--链接. 1.预处理 - 将所有的#defind,ifdef/ifndef删除并且展开 - 处理所有条件预处理指令 - 处理#in ...
- 正确理解以下名词及其含义:(1)源程序,目标程序,可执行程序(2)程序编辑,程序编译,程序连接(3)程序,程序模块,程序文件 (4)函数,主函数,被调用函数,库函数
正确理解以下名词及其含义: (1)源程序,目标程序,可执行程序. 源程序:指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令 目标程序:为源程序经编译可直接被 ...
- 正确理解以下名词及其含义1源程序,目标程序,可执行程序2程序编辑,程序编译,程序连接3程序,程序模块,程序文件4函数,主函数,被调用函数,库函数5程序调试,程序测试
正确理解以下名词及其含义: (1)源程序,目标程序,可执行程序. 源程序:指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令目标程序:为源程序经编译可直接被计算机运行 ...
- 深入gcc编译器:C/C++代码如何变为可执行程序
揭秘gcc编译器:C/C++代码如何变为可执行程序(Demystifying gcc Compiler: How C/C++ Code Becomes Executable) 一.引言(Introdu ...
- lisp编译源代码为native可执行程序的过程(收集)
sbcl (defun main () (format t "Hello, world!~%")) (sb-ext:save-lisp-and-die "hello- ...
- C语言从代码到可执行程序的过程
C语言从代码到可执行程序的过程 一个C语言程序,从代码到可执行程序的过程需要四个步骤:预处理,编译 ,汇编,链接. 1.预处理 预处理负责对源代码进行文本处理.主要处理代码中以字符#开头的命令. 有以 ...
- 串口调试助手源程序及编程详细过程
转自:http://www.gjwtech.com/vcandc/scommassistantcode.htm 目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizar ...
- C/C++从源代码到生成可执行程序的过程详解!
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. 源代码(. ...
- 源代码 到 可执行程序的过程
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. 源代码-- ...
最新文章
- mysql+dump+选项_mysqldump的几个主要选项探究
- 学python还是php2019_有2019年开始学PHP的人吗,可不可以分享一下你是如何考虑的?...
- Linux常用实用命令
- 前端技术分享:教你玩转vue-router命令视图
- 哈密尔顿算法matlab,复杂制造过程最优哈密尔顿圈算法的MATLAB仿真与分析.doc
- Arcgis 10.1安装
- python虚拟环境 windows环境搭建_windows下安装Python虚拟环境virtualenvwrapper-win
- android 判断主线程_腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程...
- Servlet面试题汇总
- 可视化实验五:大数据可视化工具—NodeXL
- c4d-c4d制作全景视频和全景图片
- 离线安装openOffice
- TIBCO Jaspersoft 使用教程+JasperReport 生成PDF记录
- vue上传大文件/视频前后端(java)代码
- Lerna 入门级教程
- 【电源设计】06正激式开关电源
- Pytorch JIT 使用经验总结
- gitlab:不能中文搜索
- 2018第一届世界区块链大会:14场实力演讲+3场专题讨论精彩绝伦
- 写一个手机号344(xxx xxxx xxxx)格式方法
热门文章
- 问题: SQLyong编辑界面汉字横向
- 关于viewer.js插件js版鼠标滚动事件放大缩小改为图片移动
- 随机过程(三)平稳随机过程
- java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.FilterDispatcher
- FT+LT+ZT+DTFT+DFS+DFT(时域和频域之间的关系)
- Java将中国标准时间字符串转换为Date格式
- 排队论模型之M/M/S模型
- 试题 基础练习 芯片测试
- 云原生监控平台 Prometheus 的相关概念及部署
- Django实战: 开发网页计数器统计页面浏览次数