在 Visual Studio 中生成 DLL 时使用静态库

Using a static library when building a DLL in visual studio

提问人:eje211 提问时间:12/24/2014 更新时间:12/24/2014 访问量:7872

问:

我正在尝试使用依赖于 OpenCV 的 Visual Studio 12 Community 构建 DLL。

我想将 OpenCV 作为 .lib 文件包含在内,这样我就不必单独分发它,但我需要将我的文件构建为 DLL。

但是我无法将 Visual Studio 配置为将库导入 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 中。这让我感到困惑。

C++ visual-studio-2012 静态链接动态链接

评论

0赞 Matt 12/24/2014
从错误中,opencv.lib 用于动态链接,您应该使用动态链接。

答:

3赞 Michael Karcher 12/24/2014 #1

该错误表示您正在尝试将已编译为使用具有调试支持的静态 C/C++ 运行时的 OpenCV 模块与模块VectorsImport.obj(可能来自您自己的项目)链接,该模块已编译为使用具有调试支持的动态 C/C++ 运行时。C 运行时库的四个变体在 Microsoft SDK 中不兼容,因此所有对象文件(来自项目或静态链接库)都必须与该设置匹配。在 Visual Studio 2010 上,可以在 C/C++-Compiler -> Codegeneration -> Runtime library 中找到它。

请注意(正如粗体字应该强调的那样)它不是关于 OpenCV 是 DLL 或 .lib,但如果 OpenCV 作为单独的 DLL 链接,则允许使用不同类型的 C 运行时库,因此不匹配无关紧要。