【问题标题】:Building a DLL on Windows that uses a static /MT lib在 Windows 上构建使用静态 /MT 库的 DLL
【发布时间】:2018-02-08 03:19:47
【问题描述】:

我有一个第三方静态库 libTA.lib。它是用/MT 构建的,我无法改变它。我想将 libTA 链接到我正在构建的 DLL 中,mydll.{lib,dll}。当然我的dll应该用/MD构建;我的 dll 将与/MD-built exe 一起使用(也不在我的控制之下)。由于 LNK2038,检测到 RuntimeLibrary 不匹配,将 mydll 与 libTA.lib 链接失败(我会说是正确的)。 那么,我能做些什么呢?使用/MT 构建 mydll 似乎是一个糟糕的主意,因为我不想拥有多个 msvc 运行时。 所以我的问题是,我有什么选择?有没有人经历过这个并找到了解决方案?

【问题讨论】:

  • 我只想为 DLL 选择/MT。我不明白为什么在 EXE 中有一个 CRT 而在 DLL 中有另一个 CRT 会如此糟糕,前提是没有新的/删除的 malloc/free fopen/fwrite/fclose(以及所有喜欢...)发生EXE/DLL 边界。

标签: windows visual-studio visual-c++ dll msdn


【解决方案1】:

将解决方案中的所有项目保存到 /MD,以便它们与外部 DLL 库动态链接。静态库可以包含在附加依赖项中或通过#pragma include () 指令。请注意,DLL 文件的符号应通过 .def 文件(使用 lib.exe 转换为 lib 文件)或 .lib 文件导出。但是,所有动态库和静态库的工具集、目标平台设置应该相同,以避免链接器错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2012-12-08
    • 2019-11-24
    相关资源
    最近更新 更多