C/C++:静态链接库和目标文件有什么区别?

我知道编译时包含在可执行文件中的代码可以来自目标文件(.o文件)和静态链接库(.lib / .a文件).从根本上和概念上讲这两者之间的区别是什么?为什么“目标代码”和“静态链接库”之间存在不同的概念?每种方法的优点和缺点是什么,为什么使用一种而不是另一种?可以从目标文件中创建静态链接库,反之亦然,可以从静态链接库中创建目标文件吗?

解决方法

目标文件是编译但未链接代码.库包含目标文件.因此,你的问题变成了,“如果我只能使用目标文件,为什么要使用静态链接的库?”这就是原因.

与一组对象(每个对象都有自己的符号表)不同,库有一个统一的符号表,当库开发人员使用s开关调用ar时创建该符号表. s调用ranlib为该存档中的所有对象创建统一符号表.

shell中运行ranlib显示在帮助文本的第一行:

Generate an index to speed access to archives.

从通用ranlib docs

An archive with such an index speeds up linking to the library and
allows routines in the library to call each other without regard to
their placement in the archive. T

另见FreeBSD ranlib docs – 不同的措辞,相同的想法:联系速度.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...