C/C++ 代码编译过程【复习】

2023-11-02

C/C++ 代码编译过程

很久很久没用过 C/C++ ,突然碰到编译过程,竟有些想不起来,这里复习一下

 

C 语言的编译链接过程要把我们编写的一个 C 程序(源代码)转换成可以在硬件上运行的程序(可执行代码,如汇编语言、机器语言)

分两个部分,编译和链接

编译

把文本形式源代码翻译为机器语言形式的目标文件的过程,.c/.cpp 文件经过编译器后,成为 .s 文件(汇编代码),再经过汇编器形成目标代码 .o 文件,整个过程为编译过程

故,编译可以分为两个阶段,编译和汇编

编译阶段,编译器会首先进行预处理,预处理主要对下面的内容进行处理:宏定义指令、条件编译指令、头文件包含指令、特殊符号

编译阶段,编译还会进行一些优化,检查语法规则,然后把代码生成为汇编码

汇编阶段,把汇编码生成为目标机器所能够读取的机器码

链接

编译阶段生成的机器码实际上还不能马上运行。因为头文件中只有函数的定义,没有函数的内容。函数的内容通常封装再dll动态库(Linux下为 .so 后缀文件或者 lib 静态库(Linux下位 .a 后缀文件)文件中。链接阶段,需要告诉编译器,去哪里找这些库文件,以及库文件的名称。

同时还需要在IED(VS)中指定库目录已经链接器链接文件的名称,即依赖项

是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成可执行代码的过程

链接的主要内容就是把各个模块之间相互引用的部分正确的衔接起来。其工作就是把一些指令对其其他符号地址的引用加以修正。链接过程包括了地址和空间分配、符号决议和重定向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++ 代码编译过程【复习】 的相关文章

随机推荐

  • C++的关键字

    关键字也称保留字 是预先定义好的标识符 有其特殊的含义 auto break case char const continue default do double else enum extern float for goto if int
  • myisam和innodb索引实现的不同

    转载 http www 2cto com database 201211 172380 html myisam和innodb索引实现的不同 MyISAM引擎使用B Tree作为索引结构 叶节点的data域存放的是数据记录的地址 下图是MyI
  • ❤️测试新人如何编写测试用例?一文从3个方面带你写一个合格的测试用例❤️

    前言 作为一个测试新人 刚开始接触测试 对于怎么写测试用例很头疼 无法接触需求 只能根据站在用户的角度去做测试 但是这样情况会导致不能全方位的测试APP 这种情况就需要一份测试用例了 但是不会写 求指教 还有就是测试出来的bug该如何追踪
  • 【笔记】公钥密码学之RSA

    数论基础 素数 1 定义 一个大于1的自然数 除了1和它本身外 不能被其他自然数整除 除0以外 的数称之为素数 质数 否则称为合数 如 3 4 12 不是素数 11除了等于11 1以外 不能表示为其它任何两个整数的乘积 所以11是一个素数
  • 目标检测之数据预处理

    一 数据介绍 AI识虫数据集结构如下 提供了2183张图片 其中训练集1693张 验证集245 测试集245张 包含7种昆虫 分别是Boerner Leconte Linnaeus acuminatus armandi coleoptera
  • Apache下设置整站变灰方法

    本文转载自http www sapub net Apache 感谢作者分享 Web服务器下设置变灰的方法比较简单 总结如下 1 安装mod ext filter模块 此模块用来在所有的输出页面插入你想要的内容 比如css 广告头之类 这里假
  • centos7设置静态IP地址

    有时候我们电脑 老是换网线 这个时候虚拟机ip就会跟着变 所以这里我建议大家直接配置静态ip 这样可以避免ip变化 目录 1 查看IP配置信息 从中获取网卡名称 2 编辑网卡名称对应的配置文件 3 修改 etc sysconfig netw
  • QT父窗口和子窗口互相通信

    这个问题上网查了好多 大神们都说的很简单 对于我这样的小白来说 理解起来就有点吃力了 下面记录一下 给自己留给笔记 也是给正在摸索中的小白们一点参考 一 大家要明白如何建立子窗口 1 利用新建ui的方式来新建 我没有用这种方式 这里就先不说
  • php 命令执行中 PHPSESSID 妙用

    php 命令执行中 PHPSESSID 妙用 前言 题目地址 查看源码 使用PHPSESSID绕过限制 使用反引号绕过限制 前言 之前刷CTF的时候 遇到一个命令执行的题 看大佬的WP是通过PHPSESSID传值 绕过waf 最近有时间复现
  • Python时间格式转换

    一 标准库 1 import time time模块中时间表现的格式主要有三种 a timestamp时间戳 时间戳表示的是从1970年1月1日00 00 00开始按秒计算的偏移量 b struct time时间元组 共有九个元素组 c f
  • 【解答】CSDN的c认证有含金量么?

    我就从考试难度 报名费用 企业认可度这几个点介绍一下吧 一 考试难度 C认证分 c1 c4 c5 三个等级 c1认证 是最基础的入门考试 以前端知识居多 考试内容多以 块状元素有哪些 行级元素有哪些居多 考试最后大题是用 html css
  • property_exists 检查对象或类是否具有该属性

    bool property exists mixed class string property 1 class myClass public mine private xpto static protected test static f
  • 有一行字符,统计其中的单词个数(单词之间以空格分隔),并将每一个单词的第一个字母改为大写。

    每天自己做的作业 不喜勿喷 define CRT SECURE NO WARNINGS include stdio h include stdlib h include string h int myStr char p int n int
  • Android:Namespace not specified. Please specify a namespace in the module‘s build.gradle file like

    文章目录 问题描述 解决方法 参考链接 问题描述 问题 接上文 解决方案记录 Could not find com android tools build gradle 8 0 在修改完对应的文件之后 并将compileSdk 版本号改为3
  • ./configure: error: C compiler cc is not found

    1 报错信息 configure error C compiler cc is not found 2 原因 没有下载gcc编译器 3 解决办法 用以下命令下载gcc编译器 yum y install gcc gcc c autoconf
  • 建立 PyQt6 窗口

    建立 PyQt6 窗口 这篇教学会介绍如何开始使用 PyQt6 建立基本的应用程序窗口 以及通过常用的窗口参数 进行窗口的相关设定 快速导航 建立 PyQt6 窗口 调整窗口样式 在窗口中放入其他组件 建立 PyQt6 窗口 PyQt6 创
  • ASP.NETCore WebApp + EFCore +Docker +MSSQL(Docker for Window)

    文章目录 一 本机环境 二 创建ASP NET Core WebApp 创建项目 添加模型 搭建基架 使用CoreFirst方式初始数据库架构 三 MSSQL Docker 拉取MSSQL Docker镜像 启动容器 环境要求 参数解析 连
  • socket failed: EPERM (Operation not permitted) 解决方法

    1 网络权限没有开启 2 不支持http 在AndroidManifest xml 中添加网络权限
  • 安全HCIP之IPX

    IPX Internetwork Packet Exchange protocol 互联网分组交换协议 IPX 是指互联网分组交换协议 提供分组寻址和选择路由的功能 保证可靠到达 相当于数据报的功能 SPX 是顺序报文分组交换协议 它可保证
  • C/C++ 代码编译过程【复习】

    C C 代码编译过程 很久很久没用过 C C 突然碰到编译过程 竟有些想不起来 这里复习一下 C 语言的编译链接过程要把我们编写的一个 C 程序 源代码 转换成可以在硬件上运行的程序 可执行代码 如汇编语言 机器语言 分两个部分 编译和链接