我正在尝试使用依赖于OpenCV的Visual Studio 12社区构建DLL。
我想将OpenCV作为.lib文件包含在内,所以我不必单独分发它,但我需要将我的文件构建为DLL。
但我无法配置Visual Studio将lib导入DLL。如果在
我的项目 - >属性 - >配置属性 - >一般 - >配置类型,
我选择“静态库(.lib)”并在:
我的项目 - >属性 - >配置属性 - > VC ++目录 - >图书馆目录,
我选择了OpenCV .lib文件的路径,并在
中我的项目 - >属性 - >配置属性 - >链接器 - >增加依赖性
我添加了对每个.lib的引用,它可以工作。
但如果我改变配置类型做“动态库(.dll)”,Visual studio告诉我:
opencv_highgui2410d.lib(window.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in VectorsImport.obj
似乎我只能用.lib文件制作.lib文件。但这似乎不太可能。我已经看了这个,但我只找到了如何制作.lib文件或.dll文件或其中一个的指南。这一定很简单,但我无法理解。我已经习惯了Linux,其中.o可以很容易地包含在.so中。这让我很困惑。
答案 0 :(得分:2)
该错误表示您正在尝试链接已使用静态 C / C ++运行时编译的OpenCV模块与模块VectorsImport.obj(可能来自您自己的项目)的调试支持,已编译为使用动态 C / C ++运行时和调试支持。 C运行时库的四种变体在Microsoft SDK中不兼容,因此所有目标文件(来自项目或来自静态链接的库)必须与该设置匹配。在Visual Studio 2010上,可以在C / C ++ - Compiler - >中找到它。代码生成 - >运行时库。
请注意(正如粗体应该强调的那样)它不是关于OpenCV是DLL还是.lib,但是如果OpenCV作为单独的DLL链接,则允许使用不同类型的C运行时库,所以不匹配并不重要。