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

你可能感兴趣的文章
nodejs中Express 路由统一设置缓存的小技巧
查看>>
Nodejs中的fs模块的使用
查看>>
nodejs包管理工具对比:npm、Yarn、cnpm、npx
查看>>
NodeJs单元测试之 API性能测试
查看>>
nodejs图片转换字节保存
查看>>
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>