我有一个链接到六个库的项目,其中包括OpenCV。
由于Release variant崩溃了,而Debug工作正常(只是慢了很多),我想在RelWithDebInfo
配置中编译我的项目。
但是,OpenCV库的Debug
版本取代了Release
(OpenCV没有RelWithDebInfo
变体)。这会导致链接错误,例如:
文件库(分配对象):错误LNK2038:检测到“运行时库”不匹配:值“MDd_DynamicDebug”与MyProject.obj中的值“MD_DynamicRelease”不匹配
如何解决这个问题?
5条答案
按热度按时间ylamdve61#
解决方案:在调用
FIND_PACKAGE(OpenCV)
后添加到CMakeLists.txt:webghufk2#
我已经使用了Dženan的上述答案,但发现一些opencv库忽略了这一点,仍然链接调试!这导致了一个msvc项目,链接混合发布和调试库的opencv。我的解决方案是创建一个新的OpenCVModules-relwithdebinfo.cmake在您的opencv安装的lib目录。该文件是OpenCVModules-release.cmake文件的副本。然后将所有对RELEASE的引用替换为RELWITHDEBINFO。这将生成一个完全链接到opencv发行库的msvc项目。额外的好处是,您不需要更改项目的CMake文件来说明这一点。
jhiyze9q3#
我也有这个问题;但是上面的答案都没有解决这个问题。
最后,我把这两行放在CMakeLists.txt的开头,解决了这个问题:
我认为$CONFIG:Debug:Release正在发挥魔力...
天哪,
米希尔
oprakyz74#
您可以使用下面的代码段禁用默认cmake发行版本的级别2优化。这仍将选择发行版opencvworld(使用完全优化构建)从未优化(尚未发布)应用程序代码。使用此功能,我们可以逐行浏览应用程序的代码,并具有完整的变量可见性。与调试构建版本一样好,但不需要与debug opencv链接或混合CRT或对所有相关组件进行完整调试构建。
k0pti3hp5#
我真的遇到了“第三方库”/ OpenCVModules的问题。@dženan的回答引导我进入正确的方向,但他的解决方案并没有为我工作,然而,添加这行之前使用
FIND_PACKAGE
解决了我的问题:请注意,它会将所有内容的回退设置为
Release
。