
C++程序的编译、链接和加载过程
文章平均质量分 68
本专栏主要收集了C++程序如何将源码编译成目标文件,再将目标文件链接成库或者可执行文件,以及动态库和可执行文件的加载过程。
小屁猪qAq
这个作者很懒,什么都没留下…
展开
-
静态链接过程发生了什么?
在静态链接过程中主要发生了两件事。一是空间与地址分配,链接器扫描所有输入文件的段,合并相似段并且重新计算段长度和在虚拟内存中的映射关系,收集所有的符号放到全局符号表中。二是符号解析与重定位,链接器收集所有的段信息和重定位信息并且进行符号解析和重定位、调整代码中的地址等。原创 2025-03-17 20:33:14 · 432 阅读 · 0 评论 -
啥是目标文件?目标文件里面有什么?
从c++文件到二进制可执行文件主要经过预处理、编译、汇编和链接的过程,而在这些过程中参与到的文件类型主要有源文件、头文件、目标文件、静态库、动态库和可执行文件。下面表格对这些文件的生成过程和涉及到的步骤名称做个总结。从上面的编译过程我们可以看出目标文件在编译过程中扮演了一个非常重要的角色。我们在编译过程中只需要一条指令就能够直接从源码生成可执行文件,往往忽略了在其中产生重要作用的目标文件。如果想要搞懂编译的原理和程序运行的底层逻辑,目标文件是我们绕不过去的一道坎。原创 2025-02-15 22:44:44 · 397 阅读 · 0 评论 -
从开机开始
官方文档:https://clang-analyzer.llvm.org/checker_dev_manual.html。clang 可以用来做代码静态分析,用于排查bug。原创 2023-07-05 10:52:31 · 156 阅读 · 0 评论 -
clang 和 AST(语法树)
官方文档:https://clang-analyzer.llvm.org/checker_dev_manual.html。clang 可以用来做代码静态分析,用于排查bug。原创 2023-03-10 17:30:16 · 398 阅读 · 0 评论 -
从一个demo说elf文件
本文的demo是在linux环境下编译解析的,cpu是x86-64首先我们先写一个功能简单的demo-SimpleSection.c。这个demo中有一个函数用来打印数据,一个已经初始化的全局变量和未初始化的全局变量,一个已初始化的局部静态变量和一个未初始化的局部静态变量。下一步我们把代码文件编译成目标文件: 接着使用使用工具查看目标文件:从上述截图中可以看出,objdump得到的 目标文件信息共有8项,前六项0~5分别是:信息项共有5列,分别为Size、VMA、LMA、File off 和 Algn。原创 2022-12-04 15:29:17 · 375 阅读 · 0 评论 -
编译过程-预处理、编译、汇编和库
我们通常所说的编译是一个比较含糊的概念。从c++代码到程序真正要经过4个步骤预处理->编译->汇编->链接原创 2022-12-03 15:17:35 · 677 阅读 · 0 评论