1. 预处理:修改代码。用#include指令添加相关的头文件,编译器可能还需要根据实际情况跳过程序中的某些代码或补充一些代码,可以用#define和#ifdef来实现。
  2. 编译:转换成汇编代码。计算机只能理解更低层的机器代码指令。而生成机器代码的第一步就是把C语言源代码转化为汇编语言代码。
  3. 汇编:生成目标代码。编译器把这些汇编代码(都是些符号代码)汇编成机器代码或目标代码,即CPU内部电路执行的二进制代码。因为你给了编译器好几个源文件来编译程序,所以编译器会为每个源文件生成一个目标代码,接下来还要做最后一件事;
  4. 链接:把目标代码放在一起。当某个目标代码的代码调用了另一个目标代码的函数时,编译器会把它们连接在一起。同时,链接还会确保程序能够调用库代码 。最后,程序会写到一个可执行程序文件中,文件格式视操作系统而定。操作系统会根据文件格式把程序加载到内存中运行。

编译器怎么把多个源文件编译成一个程序相关推荐

  1. [重点!]头文件源文件编译链接

    [重点!]头文件&源文件&编译&链接 C/C++支持分离式编译:一个程序可以分成多个部分保存在各个文件(头文件.源文件)中,在链接之前,各个文件(无论源文件还是头文件)是相互独 ...

  2. 编译器编译16bit单片机程序对数组data[0]=0x12,data[1]=0xBD,data[2]=0x00,data[3]=0x45转换成16进制整数12BD0045的报警

    16bit单片机程序: 定义32bit一个变量,uint32_t  decData = 0; 刚开始时在16bit和32bit单片机中都这样写: decData = ( data[0] << ...

  3. as工程放到源码编译_方舟编译器学习笔记2 源码编译

    根据方舟官方文档编译了方舟编译器的源码,在这里简单谈谈其源码的编译过程: 1.操作系统环境: 64位版本的Ubuntu(官方推荐Ubuntu 16.04).我自己本身就有Ubuntu 16.04的虚拟 ...

  4. java源文件编译成jar_从源文件和JAR文件构建Java代码模型

    java源文件编译成jar 最近,我花了一些时间来研究有效java ,该方法正在GitHub上达到300星(可以免费帮助实现目标:D). Effectivejava是在您的Java代码上运行查询的工具 ...

  5. python源文件改写编写一个程序读取一个python源程序文件_学PYTHON第三节:编译和解释...

    计算机执行源程序的两种方式:编译和解释 首先,了解一下静态语言,动态语言,目标代码,源代码. 动态类型语言(又称为脚本语言或扩建语言):在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量 ...

  6. python编译so_Mac上把python源文件编译成so文件

    把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...

  7. 【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】

    文章目录 Linux-centos7.9系统GNU编译器套件(gcc/g++/gfortran)离线编译安装 一.★GNU编译器套件定义 二.★GNU-GCC编译环境说明 三.★GNU-GCC编译安装 ...

  8. python文件编译为so_Mac上把python源文件编译成so文件

    把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...

  9. 怎样用gcc编译c语言,使用GCC编译C语言程序

    使用Eclipse CDT开发C语言程序,虽然使用很方便,效率也很高,但是它向我们隐藏了很多细节.虽然大多数时候这并不影响我们的开发,但是当我们需要对程序的编译链接过程进行更加特殊的控制,以获得可以满 ...

  10. 在Ubuntu虚拟机中编译运行C程序

    一.准备工具 1.gcc GCC是GNU公社的一个项目.是一个用于编程开发的自由编译器.最初,GCC只是一个C语言编译器,它是GNU C Compiler 的英文缩写.随着众多自由开发者的加入和GCC ...

最新文章

  1. 【Qt】Qt再学习(九):并发 QtConcurrent、QFuture、QFutureWatcher
  2. Python算法实战系列:栈
  3. 1203正规式转换为有穷自动机
  4. UOJ59 WC2013 小Q运动季
  5. python 在线字典_python3
  6. linux下mysql数据库目录迁移_mysql实现linux下数据库目录迁移
  7. 91卫图助手下载器永久免费啦!
  8. 网络安全实验5 证书应用和证书管理
  9. android imageloader 路径,Android中的Universal-Image-Loader的使用
  10. 中国企业管理软件之殇
  11. Uncaught TypeError: XXX is not a function解决
  12. 微信运动如何读取小米手环的数据
  13. 高通7x27a平台UART配置
  14. RSA的dp泄露 —— 【WUST-CTF2020】leak
  15. 山东计算机技能高考试题,(完整版)2016山东春季高考技能考试-信息技术类专业试题...
  16. 个人成长【提升认知销量秘籍】
  17. 第五节、AHK对话框详解
  18. 特殊教育学校计算机教学心得,特教老师心得体会
  19. ffmpeg 分辨率 压缩_视频怎么在尽量不损害画质的前提下压缩?
  20. VBA给Office添加任务窗格

热门文章

  1. [swift] UIImage NSImage PNG透明区域填充自定义颜色实现
  2. java导出CSV文件
  3. matlab 数值积分求面积,用几种数值积分的方法计算地图面积
  4. Tupper自我指涉公式:图象里竟然包含式子本身
  5. 程序查询方式、程序中断方式和DMA方式
  6. python植物大战僵尸辅助_GitHub又放大招,Python版本的植物大战僵尸还能作弊玩!...
  7. iOS 音乐播放 Swift
  8. diy计算机工作站,DIY 篇一:TU100组装移动工作站
  9. linux 基础林海峰,word数学公式编辑器-官方版合集下载-多特
  10. Microsoft edge升级之后收藏夹内容丢失_等了这么久,Edge 终于成为我的默认浏览器...