【发布时间】:2020-12-07 17:44:00
【问题描述】:
例如,有三个目标文件a.obj b.obj c.obj刚刚用cl编译出来,希望将它们合并为一个combined.obj。
SO question 的评论指出,在 *nix 上,可以使用 ld 做这种事情。但是,cl 和link 似乎都只支持.exe、.dll 和.lib 作为输出。
我想对组合目标文件做的整个过程如下:
-
a.obj b.obj c.obj->combined.obj -
combined.obj d.obj e.obj->executable.exe
我的问题解决了。 a.obj b.obj c.obj 使用了一些尚未链接的变量和函数,我认为.lib 不能容忍缺少的函数,因为它是一个库,但实际上没关系。我可以将它们合并到一个.lib 文件中:
lib *.obj /OUT:combined.lib
【问题讨论】:
-
将它们放入 .lib 文件有什么问题吗?毕竟,它们的用途是:将目标代码收集到一个库中。
-
可能有一个工具可用于合并目标文件。但是,一般来说,这就是对象 library 的用途。
-
@Aoyama 您可以将 any 目标代码填充到 .lib 文件中。外部依赖没有区别。最终,lib 的使用者将不得不通过提供仍然缺少的任何东西来完成它。一个 DLL,不同的故事,但一个常规的存档库实际上只是一个目标代码包。
-
@Aoyama 如果您最后的评论是关于进行链接时代码生成等的能力 - MSVC 可以使用对象库来做到这一点,如果你告诉它构建考虑到该选项的那些库。
-
注意阿德里安所说的话。如果您希望使用 LTCG 构建发布版本,则需要确保您填充到 .lib 中的 obj 已充分配置为这样做。
标签: c windows visual-c++ linker