将源程序变为可执行程序的过程

  1. 高级语言---->汇编语言---->机器语言

  2. 更具体的变换细节

    • 源代码:就是我们用C/C++写的代码,后缀名是.c/.cpp
    • 预处理器:它的作用有将我们导入的头文件展开,删除注释,替换宏等
    • 预处理后源代码:就是经过预处理器处理过的代码,后缀名为.i它其实和第一步的源代码差不多,就是增加或替换了一些细节,还是我们可以看懂的c/c++代码
    • 编译器:它的作用就是将预处理后源代码转换为汇编代码
    • 汇编代码: 就是经过编译器处理后的代码,后缀名为.s,这一步的代码如果有汇编基础,也可以看懂
    • 汇编器: 它的作用就是将上一步的汇编代码转换为机器指令即二进制代码
    • 目标代码: 就是经过汇编器处理后的代码,后缀名为.o,这一步的代码里面全是01的组合,基本看不懂
    • 链接器: 它的作用是将目标代码与启动代码,库代码,其他目标代码(比如我们写了很多个源文件,就可以生成很多个目标代码)连接起来,组成一个完整的逻辑地址
    • 可执行程序: 就是经过链接器后生成的代码,在linux中后缀名为.out,在window中后缀名为.exe

    编译器和汇编器老是搞混,编译器是编译成汇编语言,汇编器才是编译成机器语言

  3. 在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编译器,则该宏就是未定义的,否则就是已定义的
  4. GCC常用参数选项

    我们通常在linux中编译一个C程序的命令为gcc test.c -o app
    这句命令的作用就是将test.c源程序编译为一个可执行文件app,执行这个命令,在内部分别执行了-e,-c命令

    大部分都是参考牛客网Linux系统编程https://www.nowcoder.com/study/live/504/1/8

将源程序变为可执行程序的过程相关推荐

  1. 源程序到可执行程序的编译过程

    一份源代码,从开始产生到成为可执行程序的过程:预处理--编译--汇编--链接. 1.预处理 - 将所有的#defind,ifdef/ifndef删除并且展开 - 处理所有条件预处理指令 - 处理#in ...

  2. 正确理解以下名词及其含义:(1)源程序,目标程序,可执行程序(2)程序编辑,程序编译,程序连接(3)程序,程序模块,程序文件 (4)函数,主函数,被调用函数,库函数

    正确理解以下名词及其含义: (1)源程序,目标程序,可执行程序. ​ 源程序:指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令 ​ 目标程序:为源程序经编译可直接被 ...

  3. 正确理解以下名词及其含义1源程序,目标程序,可执行程序2程序编辑,程序编译,程序连接3程序,程序模块,程序文件4函数,主函数,被调用函数,库函数5程序调试,程序测试

    正确理解以下名词及其含义: (1)源程序,目标程序,可执行程序. 源程序:指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令目标程序:为源程序经编译可直接被计算机运行 ...

  4. 深入gcc编译器:C/C++代码如何变为可执行程序

    揭秘gcc编译器:C/C++代码如何变为可执行程序(Demystifying gcc Compiler: How C/C++ Code Becomes Executable) 一.引言(Introdu ...

  5. lisp编译源代码为native可执行程序的过程(收集)

    sbcl (defun main ()   (format t "Hello, world!~%")) (sb-ext:save-lisp-and-die "hello- ...

  6. C语言从代码到可执行程序的过程

    C语言从代码到可执行程序的过程 一个C语言程序,从代码到可执行程序的过程需要四个步骤:预处理,编译 ,汇编,链接. 1.预处理 预处理负责对源代码进行文本处理.主要处理代码中以字符#开头的命令. 有以 ...

  7. 串口调试助手源程序及编程详细过程

    转自:http://www.gjwtech.com/vcandc/scommassistantcode.htm 目次: 1.建立项目   2.在项目中插入MSComm控件 3.利用ClassWizar ...

  8. C/C++从源代码到生成可执行程序的过程详解!

    编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. 源代码(. ...

  9. 源代码 到 可执行程序的过程

    编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. 源代码-- ...

最新文章

  1. mysql+dump+选项_mysqldump的几个主要选项探究
  2. 学python还是php2019_有2019年开始学PHP的人吗,可不可以分享一下你是如何考虑的?...
  3. Linux常用实用命令
  4. 前端技术分享:教你玩转vue-router命令视图
  5. 哈密尔顿算法matlab,复杂制造过程最优哈密尔顿圈算法的MATLAB仿真与分析.doc
  6. Arcgis 10.1安装
  7. python虚拟环境 windows环境搭建_windows下安装Python虚拟环境virtualenvwrapper-win
  8. android 判断主线程_腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程...
  9. Servlet面试题汇总
  10. 可视化实验五:大数据可视化工具—NodeXL
  11. c4d-c4d制作全景视频和全景图片
  12. 离线安装openOffice
  13. TIBCO Jaspersoft 使用教程+JasperReport 生成PDF记录
  14. vue上传大文件/视频前后端(java)代码
  15. Lerna 入门级教程
  16. 【电源设计】06正激式开关电源
  17. Pytorch JIT 使用经验总结
  18. gitlab:不能中文搜索
  19. 2018第一届世界区块链大会:14场实力演讲+3场专题讨论精彩绝伦
  20. 写一个手机号344(xxx xxxx xxxx)格式方法

热门文章

  1. 问题: SQLyong编辑界面汉字横向
  2. 关于viewer.js插件js版鼠标滚动事件放大缩小改为图片移动
  3. 随机过程(三)平稳随机过程
  4. java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.FilterDispatcher
  5. FT+LT+ZT+DTFT+DFS+DFT(时域和频域之间的关系)
  6. Java将中国标准时间字符串转换为Date格式
  7. 排队论模型之M/M/S模型
  8. 试题 基础练习 芯片测试
  9. 云原生监控平台 Prometheus 的相关概念及部署
  10. Django实战: 开发网页计数器统计页面浏览次数