我刚刚尝试使用Visual C++ 2012构建一个x64 C++ DLL。它是一个简单的DLL链接另一个静态第三方.lib文件。我收到以下警告消息:在Visual C++ DLL项目中冲突的运行时库
警告LNK4098:defaultlib'LIBCMT'与使用其他库相冲突;使用/ NODEFAULTLIB:库
似乎其他库使用/ MT(多线程静态运行时)链接器选项,而我的DLL(和所有其他项目导入我的DLL)使用/ MD(多线程DLL运行时)。我不能协调这一点,因为第三方库是按原样交付的,并且更改我的DLL会在使用我的DLL的所有项目中创建相同的问题。
我从MS和论坛上阅读了关于这个问题的一些页面。但这些网页中没有一个解释了这里的问题到底是什么。
我不明白:
什么是连接使用不同的运行时变种(不是浪费内存除外)代码的危害?有人说这可以忽略,有人说可能不会。
可以使用/ NODEFAULTLIB [:library]吗?文档说它将“在解析外部引用时从其搜索的库列表中删除指定的库或库”。我应该添加哪个库作为“:library”,并以哪种方式解决问题?
库已经有一个普通的C API。据我所知,不需要共享分配的内存,因为DLL提供了所有需要的创建和解析功能。似乎lib已经满足您的安全使用规则。 但是,我该如何摆脱恼人的警告?和/ NODEFAULTLIB [:library]有哪些影响? – Silicomancer
对不起,应该阅读“... lib耗材所有需要...” – Silicomancer
我仍然会将其包装到一个DLL。我认为这可能是最简单的路线。 – villintehaspam