博客
关于我
程序链接链的是什么?链接器通过什么进行的链接?为什么需要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/

你可能感兴趣的文章
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>
python判断字符串包含中文_Python 判断字符串是否包含中文
查看>>
python删除第一行_Python 乱码指北:一行删掉根目录
查看>>
Python删除列表元素的三种方法
查看>>
python初步学习-python数据类型-集合(set)
查看>>
python列表生成字典_Python中将字典转换为列表的方法
查看>>
python列表对应元素合并为列表及判断一个列表是几维
查看>>
python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
查看>>
python列表前几个_python之列表
查看>>
python列表元组
查看>>
Python列表/元组/字典和集合使用
查看>>
python列表 行列选择_python_pandas_dataframe_行列选择_切片操作
查看>>
python列表
查看>>
python列出当前目录、子目录和文件的脚本
查看>>
python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
查看>>