我只是尝试使用 Visual C++ 2012 构建一个 x64 C++ DLL。它是一个简单的 DLL,链接另一个静态第三方 .lib 文件。我收到以下警告消息:
警告 LNK4098:defaultlib 'LIBCMT' 与其他库的使用冲突;使用 /NODEFAULTLIB:library
似乎其他库使用 /MT(多线程静态运行时)链接器选项,而我的 DLL(以及导入我的 DLL 的所有其他项目)使用 /MD(多线程 DLL 运行时)。我无法协调这一点,因为第三方库是按原样交付的,并且更改我的 DLL 会在使用我的 DLL 的所有项目中产生相同的问题。
我从 MS 和论坛上阅读了一些关于这个问题的页面。但是这些页面都没有解释这里到底是什么问题。
我不明白的是:
链接使用不同运行时变体(除了浪费内存)的代码有什么危害?有人说可以忽略,有人说不能。
可以使用 /NODEFAULTLIB[:library] 吗?文档说它将“在解析外部引用时从它搜索的库列表中删除一个或多个指定的库”。我应该将哪个库添加为“:library”,这以何种方式解决了问题?