使用clang(Windows)链接动态C运行时库

10
在Windows上使用Clang(使用msvc libs)默认会链接静态运行时库libcmt。是否有一种简单的方法来链接动态库(msvcrt)?
通常,Clang将-defaultlib: libcmt添加到链接器命令中,将程序链接到静态运行时库。即使源文件为空,也会发生这种情况。
我发现你可以通过添加选项-Wl,-nodefaultlib: libcmt-D_DLL-lmsvcrt来覆盖默认值。然而,这似乎很麻烦。有没有更好的方式来链接动态运行时库?

2
至少我没有找到更好的方法。感谢-Wl,-nodefaultlib:libcmt -D_DLL -lmsvcrt。这就是我一直在寻找的。 - Sergey.quixoticaxis.Ivanov
2个回答

4
如果您使用clang-cl,常规的/MT / /MD标志可以正常工作。

不幸的是,clang-cl.exe 可能与不是所有人的构建系统兼容。切换到 clang-cl.exe 可能并不容易。 - Michael Labbé
普通的Clang默认不会添加libcmt库,因此您可以正常传递msvcrt.lib(或libcmt.lib)。如果您不使用clang-cl,则不会出现clang-cl自动添加libcmt的问题 :) - thakis
如果这是真的,那么clang在链接使用crt函数的任何内容时都不会成功,除非你指定一个。但实际上它并没有失败。它默认链接libcmt[d].lib。你可以通过创建一个hello world程序,并在其上运行dumpbin /DIRECTIVES来验证这一点。 - Michael Labbé
@MichaelLabbé 你指的是 dumpbin /directives 的哪个具体输出?还是说你想看 dumpbin /dependents 的输出? - Johan Boulé

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接