例如,有三个目标文件a.obj b.obj c.obj
刚刚用cl
编译出来,并且希望将它们合并组合成一个combined.obj
。
一个SO问题的评论指出,在 *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
字符串
2条答案
按热度按时间liwlm1x91#
似乎不是,但将它们合并到
.lib
中是很方便的:字符串
jrcvhitl2#
您 * 可以 * 将here使用的方法应用于
cl.exe
创建的COFF文件,* 前提是 * 您的ld
版本支持相应的输入和输出格式,并且这些格式适合该过程。在这种情况下,你可以这样做(是的,
$INPUTS
意味着你可以根据需要给予多个对象文件):字符串
--oformat pe-x86-64
(也称为AMD 64,Windows上的x64)是必要的,只要ld
已经构建了不同的默认输出格式。如果是这样的话,你 * 没有 * 给给予
--oformat
,你会得到这样的结果:型
然而这个过程并不适用于所有的输入/输出格式组合,正如我在Ubuntu 20.04上使用
ld
2.34所了解到的那样:型
**注:**在这一点上,我没有运气得到这个工作与
lld-link
或ld.lld
(都可以通过现代VS版本),虽然。附言:另一个需要注意的工具是Agner Fog的
objconv
,它是一个通用的性能优化工具(尽管它目前似乎没有实现这个确切的功能)。