在Visual Studio中构建DLL时使用静态库

6
我正在尝试使用Visual Studio 12 Community构建一个依赖于OpenCV的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 中。这让我困惑。


从错误来看,opencv.lib 是用于动态链接的,你应该使用动态链接。 - Matt
1个回答

3
该错误表明您正在尝试链接一个已编译为使用静态C/C++运行时和调试支持的OpenCV模块与一个已编译为使用动态C/C++运行时和调试支持的模块VectorsImport.obj(可能来自您自己的项目)。在Microsoft SDK中,四个C运行时库的变体不兼容,因此所有对象文件(无论是来自您的项目还是来自静态链接库)都必须匹配该设置。在Visual Studio 2010中,它可以在C/C++-编译器 -> 代码生成 -> 运行时库中找到。
请注意(如粗体应强调的那样),这与OpenCV是否为DLL或.lib无关,但是如果将OpenCV链接为单独的DLL,则允许使用不同类型的C运行时库,因此不匹配并不重要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接