【问题标题】:Link dynamic C runtime with clang (windows)使用 clang 链接动态 C 运行时(Windows)
【发布时间】:2017-06-10 13:21:57
【问题描述】:

默认情况下,Windows 上的 Clang(使用 msvc 库)与 libcmt(静态运行时库)链接。有没有简单的方法链接动态库(msvcrt)?

通常,clang 会在链接器命令中添加-defaultlib:libcmt,它将程序链接到静态运行时。即使源文件为空,也会发生这种情况。

我发现您可以通过添加选项-Wl,-nodefaultlib:libcmt -D_DLL -lmsvcrt 来覆盖默认值。然而,这似乎很尴尬。还有比这更好的链接动态运行时的方法吗?

【问题讨论】:

  • 至少我没有找到更好的方法。感谢-Wl,-nodefaultlib:libcmt -D_DLL -lmsvcrt。这就是我一直在寻找的。​​span>

标签: c++ c windows clang


【解决方案1】:

我遇到了类似的问题,发现我必须链接到 msvcrt、vcruntime 和 ucrt。有关更多信息,请参阅此帖子https://devblogs.microsoft.com/cppblog/introducing-the-universal-crt/。

【讨论】:

    【解决方案2】:

    如果你使用 clang-cl,常规的 /MT / /MD 标志会起作用。

    【讨论】:

    • 很遗憾,clang-cl.exe 可能无法与每个人的构建系统兼容。切换到 clang-cl.exe 可能并非易事。
    • 常规clang默认不添加libcmt,所以你可以正常传递msvcrt.lib(或libcmt.lib)。如果你不使用clang-cl就没有clang-cl自动添加libcmt的问题:)
    • 如果这是真的,那么除非您指定,否则 clang 将无法成功链接任何使用 crt 函数的东西。它不会失败。它默认链接 libcmt[d].lib。您可以通过创建一个 hello world 并在其上运行 dumpbin /DIRECTIVES 来验证这一点。
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2017-02-10
    • 2013-08-31
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多