原文请见 C 编译器、链接器、加载器详解

0. 预编译

  • 在编译 C++ 程序的预处理阶段,源程序中的所有常量表达式都需要首先计算并替换为对应的具体数值。
  • C语言编译器在对源代码编译之前,还需要进一步的处理:预编译(pre-compile):
  • 预编译主要完成:
    • 1.将源文件中以”include”格式包含的文件复制到编译的源文件中。
    • 2.用实际值替换用“#define”定义的字符串。
    • 3.根据“#if”后面的条件决定需要编译的代码。

1. 链接器(linker)

  • 链接器是编程语言或操作系统提供的工具,它的工作即是解析未定义分符号,通过将目标文件中的占位符替换为符号地址

2. 完整流程

C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。

  • 编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。
  • 链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。

  • 预处理器:将.c 文件转化成 .i文件,使用的gcc命令是:gcc –E,对应于预处理命令cpp;
  • 编译器:将.c/.h文件转换成.s文件,使用的gcc命令是:gcc –S,对应于编译命令 cc –S;
  • 汇编器:将.s 文件转化成 .o文件,使用的gcc 命令是:gcc –c,对应于汇编命令是 as;
  • 链接器:将.o文件转化成可执行程序,使用的gcc 命令是: gcc,对应于链接命令是 ld;
  • 加载器:将可执行程序加载到内存并进行执行,loader 和 ld-linux.so。

C 编译器、链接器、加载器详解相关推荐

  1. Java类的加载过程详解 面试高频!!!值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话: 八小时内谋生活,八小时外谋发展. 望别日与 ...

  2. 中yeti不能加载_第二十章_类的加载过程详解

    类的加载过程详解 概述 在 Java 中数据类型分为基本数据类型和引用数据类型.基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载 按照 Java 虚拟机规范,从 Class 文件到加载到内 ...

  3. 类加载顺序及加载过程详解

    转自: 类加载顺序及加载过程详解 下文笔者讲述类的加载顺序及加载过程的详解说明,如下所示 java创建对象的方式分为以下四种 new 反射克隆反序列化 class对象获取的方式分享 //没有完成初始化 ...

  4. 新手必看:访问url到加载全过程详解(看完不会我吃shi)

    新手必看:访问url到加载全过程详解(看完不会我吃shi) 1.放在前面:新手必须知道的那些概念 1.1 什么是IP.域名.主机名.url.服务器 1.2 http & https 1.3 O ...

  5. android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解

    本文为大家分享了Android横竖屏切换及其对应布局加载问题,供大家参考,具体内容如下 第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同 ...

  6. php自动加载类与路由,PHP实现路由与类自动加载步骤详解

    这次给大家带来PHP实现路由与类自动加载步骤详解,PHP实现路由与类自动加载步骤详解的注意事项有哪些,下面就是实战案例,一起来看一下. 项目目录如下 入口文件index.php<?php def ...

  7. Trembling ! Java类的加载过程详解(加载验证准备解析初始化使用卸载)

    [1]类的生命周期 一个类从加载进内存到卸载出内存为止,一共经历7个阶段: 加载->验证->准备->解析->初始化->使用->卸载 其中,类加载包括5个阶段: 加载 ...

  8. jboss之启动加载过程详解(-)

    今天看了看jboss的boot.log和server.log日志,结合自己的理解和其他的资料,现对jboss的启动和加载过程做出如下总结: 本文以JBoss Application Server 4. ...

  9. Java虚拟机(JVM)之类的加载过程详解

    java程序在对某个类进行引用.使用时,就会开始对该类进行加载,比如直接使用类加载器进行显式加载.创建该类的对象.使用该类的类变量等情况.类的加载是通过java虚拟机的类加载子系统完成的.类的加载主要 ...

  10. 类的加载过程详解:加载、验证、准备、解析、初始化

    想要弄明白的知识点: 类加载的过程,加载.验证.准备.解析.初始化.每个部分详细描述. 加载阶段读入.class文件,class文件时二进制吗,为什么需要使用二进制的方式? 验证过程是防止什么问题?验 ...

最新文章

  1. Linux二十年产权官司告终:IBM赔偿近亿元,期间“熬死”一位起诉方
  2. python中math isnan,在python中指定一个变量NaN,不用numpy
  3. 四大微博OAuth认证
  4. Git《一》简介及安装使用
  5. 償債基金(Sinking fund)
  6. CNN框架的搭建及各个参数的调节
  7. centos 6.5卸载Mysql
  8. Python基础---时间模块 (二)
  9. 遗传算法和禁忌搜索解TSP
  10. 项目二 任务六 管理Linux系统的文件权限
  11. 信号分析的短时傅里叶变换(scipy.signal.stft)
  12. 同旭堂同湿散真实效果,七大真实效果让你彻底放心
  13. flume Consolidation
  14. 远程访问内网服务器使用FRP实现内网穿透
  15. Qt项目的新首席维护人员
  16. OpenSSL生成根证书CA及签发子证书
  17. 干货,史上杀伤力最大的溢出型漏洞到底是什么?看这一篇就够了| 漏洞连载
  18. 从图像中提取特定颜色区域。
  19. 将汉字转化为拼音,正则表达式和得到汉字的Unicode编码
  20. OpenEmu添加Core和bios

热门文章

  1. 泛微OA项目引入jar包说明
  2. 红帽linux企业版6的进程,红帽企业版 Linux 6 设备映射多路径
  3. python按哪个键删除_Python-从字典中删除键的方法
  4. datagridview输入数据格式化_第五节,输入输出函数
  5. Spark面试中的cache和persist
  6. java懒加载注解_在springboot中实现个别bean懒加载的操作
  7. linux查看接口的命令,linux shell命令查看接口索引--ip link show
  8. CUDA精进之路(三):图像处理——图像灰度化、灰度直方图统计
  9. OpenCV探索之路(五):图像变换——边缘检测(canny、sobel、laplacian)
  10. notepad++ 配置C/C++环境