在 Windows 上构建一个使用静态 /MT 库的 DLL

Building a DLL on Windows that uses a static /MT lib

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

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