【发布时间】:2021-07-18 07:39:51
【问题描述】:
头文件只包含函数的声明,函数的实际实现在库中。如果他们不想共享源代码,他们可以共享 obj 文件。 当一个函数的实现也可以在另一个 C++ 文件中完成时,我们为什么要使用库?
【问题讨论】:
-
库或多或少只是 .obj 文件的集合。例如,标准 C 库可能由 50 个左右的 .obj 文件组成。分发一个库比分发 50 个 .obj 文件要简单得多。
-
库是对象文件的集合。最初,库文件只是归档的目标文件。因此,静态库是通过调用ar 构建的。后来,共享对象 (
.so) 被引入,它提供了延迟链接和节省磁盘空间等优点。 -
您愿意 a) 将每个库的单个选项传递给链接器,还是 b) 将 300 个 .o 文件传递给链接器。如果您选择选项 b,每次库供应商重写代码时,您会如何调整此链接器调用,例如添加一个辅助类并删除一些不再使用的类。此外,如果您需要类似插件的功能,则可以在运行时动态加载共享库;不确定这是否可以通过对象库实现,即使它发生战争,也必须列出所有正确的 .o 文件。