博客
关于我
程序链接链的是什么?链接器通过什么进行的链接?为什么需要extern “C“?
阅读量:526 次
发布时间:2019-03-08

本文共 820 字,大约阅读时间需要 2 分钟。

链接链的本质:理解被链接器视为关键的目标文件

有时候,我们对编程世界的运行机制知之甚少。当我第一次接触内科研项目时,发现程序链接这一概念异常复杂。目标文件到底是什么?它们如何被链接?为什么会有 extern "C" 这个关键字?这些问题一路萦绕在我的脑海中,直到有一天,在一篇技术博客中找到了答案。

目标文件:编译后未经链接的中间文件目标文件是编译过程中生成的中间文件,类似于.o文件在Linux系统中。它们包含了程序运行所需的机器指令和数据,但尚未与其他文件进行链接。这些文件可以被链接器整合成最终的可执行文件或共享库。通过对目标文件的了解,我明白了它们在编程世界中的重要地位。

链接器的链接接口:符号作为粘合剂链接器通过符号将目标文件进行链接。每个函数和变量都可以看作是一个符号,每个符号都有独特的名字。链接过程就像玩具积木的拼接,符号作为连接剂,确保各种目标文件能够协同工作。在实际操作中,符号被分为局部符号和外部符号。局部符号仅在编译单元内部起作用,而外部符号则可以被其他目标文件引用,这在程序的整体链接中至关重要。

理解 extern "C" 的必要性C语言和C++在符号表达方式上有显著差异。由于 languages-supported 的不同,直接在C++项目中使用C函数可能导致符号冲突。 extern "C" 的引入解决了这一问题。它告知编译器使用C语言的符号表达方式,将C函数与C++整合起来。在实际应用中,许多库函数如 memset 都必须使用 extern "C" 宏声明,以确保与C++项目兼容。

通过对这些知识的理解,我逐渐掌握了链接过程的核心逻辑。这不仅仅是理论上的思考,更是实践中解决问题的关键。每当我在编译器中看到 "undefined symbol" 的错误提示时,总能回想起链接器是如何通过符号将各个目标文件整合在一起的。这让我对编程工具的运行原理有了更深刻的理解,也让我在面对实际编程问题时更加从容。

转载地址:http://lvuiz.baihongyu.com/

你可能感兴趣的文章
Objective-C ---JSON 解析 和 KVC
查看>>
Objective-C 编码规范
查看>>
Objective-Cfor循环实现Factorial阶乘算法 (附完整源码)
查看>>
Objective-C——判断对象等同性
查看>>
objective-c中的内存管理
查看>>
Objective-C之成魔之路【7-类、对象和方法】
查看>>
Objective-C享元模式(Flyweight)
查看>>
Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
查看>>
Objective-C内存管理教程和原理剖析(三)
查看>>
Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
查看>>
Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
查看>>
Objective-C实现 lattice path格子路径算法(附完整源码)
查看>>
Objective-C实现1000 位斐波那契数算法(附完整源码)
查看>>
Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
查看>>
Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
查看>>
Objective-C实现2D变换算法(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现9x9乘法表算法(附完整源码)
查看>>
Objective-C实现9×9二维数组数独算法(附完整源码)
查看>>