【发布时间】:2018-01-17 12:44:33
【问题描述】:
我的配置
- Windows 10 64 位
- Visual Studio 社区 2017 与 Visual C++ 2017
- CMake 3.9.0
- opencv 3.3.0
目标
目标是将 opencv 构建为静态库 (.lib) 并包含到作为 DLL 的 Visual C++ 项目中。一切都应该为 x86 架构或简单的 32 位编译。
流程
最新的 opencv 发行版不包含为 32 位系统编译的 dll,因此,我需要编译自己的版本。根据"installation in Windows" 上的opencv 2.4 文档。我已经编译了库,禁用了BUILD_SHARED_LIBS 选项并配置了目标项目,如"how to build applications with OpenCV inside the Microsoft Visual Studio" 中所述。
我的项目编译失败并出现以下错误(错误总数大于 800)
错误类型 1
LNK2038 mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug'
doesn't match value 'MDd_DynamicDebug' in main.obj
\opencv_core320d.lib(alloc.obj)
错误类型 2
LNK2005 "public: void __thiscall std::basic_ostream<char,struct
std::char_traits<char> >::_Osfx(void)" (?_Osfx@?$basic_ostream@DU?
$char_traits@D@std@@@std@@QAEXXZ) already defined in
opencv_core320d.lib(system.obj) \msvcprtd.lib(MSVCP140D.dll)
错误类型 3
LNK2001 unresolved external symbol _ippicviHSVToRGB_16u_C3R@24
\opencv_imgproc320d.lib(color.obj)
我认为这可能是由于编译选项不协调或项目配置错误,但由于我是重度 Linux 用户,因此在 Windows 上设置这些东西时遇到了困难。
更新
在我匹配屏幕下方显示的配置后,关于代码生成不匹配的错误块消失了,但未定义的引用仍然存在。
感谢您的帮助!
【问题讨论】:
-
这几乎可以肯定是由于您的编译器或链接器设置。在库项目和 DLL 项目之间进行比较。
-
我们可以为您的项目获取 CMakeLists.txt,该项目试图链接到 opencv 库吗?我猜这里有问题......
-
@g19fanatic 我的项目不是用 CMake 构建的,只有 opencv。我的 DLL 只是 Visual Studio 中的一个 win32 应用程序项目,所以我相信它是按照一些 Visual Studio 规则构建的。
标签: c++ opencv cmake visual-studio-2017 static-libraries