虽然将多个目标文件组合到一个库中是司空见惯的事情,但也可以(至少在 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/