c++ - C/C++。库相对于组合目标文件的优势

标签 c++ c linker object-files

虽然将多个目标文件组合到一个库中是司空见惯的事情,但也可以(至少在 Linux 中)将多个目标文件组合到另一个目标文件中。

(参见 combine two GCC compiled .o object files into a third .o file)

因为使用库而不是仅仅组合目标文件有缺点:

1:链接时只使用一种类型的文件(对象)会更容易,尤其是当所有文件都做同样的事情时。

2:链接时(至少在 GCC 中),库(默认情况下)需要排序并且不能处理循环依赖。

我想知道图书馆有什么优势(除了经常使用的第 22 条军规之外)。

搜索了一段时间后,我得到的唯一解释似乎是单个库优于多个目标文件。

最佳答案

虽然这取决于所使用的链接器,但目标文件将完整地包含在最终的二进制文件中。因此,如果您将多个目标文件合并为一个目标文件,则生成的(合并的)目标文件将包含在生成的二进制文件中。

相比之下,库就是目标文件库。链接器只会从它需要解析所有符号链接(symbolic link)的库中提取目标文件。如果不需要目标文件(在库中),则它不会包含在二进制文件中。

关于c++ - C/C++。库相对于组合目标文件的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243092/

相关文章:

c++ - 单例中的全局对象

c - 如果 CPU 支持 AVX 扩展,如何使用 Intel intrinsics 检查?

c - 与 ld/gcc 链接不会产生相同的结果(错误/成功)

c - 如何查找链接到同一应用程序的两个库之间的所有符号冲突(引用和未引用的符号)?

c - 如何使用这个链接描述文件程序?

c++ - timer_create() : -1 EAGAIN (Resource temporarily unavailable)

c++ - 输入与输出迭代器 - 命名约定

c++ - 在hackerrank平台上的列表中插入节点时出现段错误

c++ - 为什么很多窗口管理器不支持面向对象?

c - Valgrind C 中链表的大小 4 读取无效