CMake RelWithDebInfo链接到Debug libs

时间:2014-06-17 11:00:47

标签: c++ opencv linker cmake

我有一个项目链接到六个图书馆,其中包括OpenCV 由于Release变量崩溃,而Debug工作正常(速度慢很多),我想在RelWithDebInfo配置中编译我的项目。
但是,包含Debug版本的OpenCV库而非Release(OpenCV没有RelWithDebInfo变体)。这会导致链接错误,例如:

  

opencv_core249d.lib(alloc.obj):错误LNK2038:检测到'RuntimeLibrary'不匹配:值'MDd_DynamicDebug'与MyProject.obj中的值'MD_DynamicRelease'不匹配

如何解决这个问题?

3 个答案:

答案 0 :(得分:17)

解决方案:在调用FIND_PACKAGE(OpenCV)后添加到CMakeLists.txt:

set_target_properties(${OpenCV_LIBS} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE)

答案 1 :(得分:2)

我已经使用了Dženan的上述答案,但发现一些opencv库忽略了这一点,仍然链接调试!这导致一个msvc项目链接opencv的混合版本和调试库。我的解决方案是在opencv安装的lib目录中创建一个新的OpenCVModules-relwithdebinfo.cmake,它是OpenCVModules-release.cmake文件的副本。然后用RELWITHDEBINFO替换对RELEASE的所有引用。 这会产生一个完全链接到opencv release libs的msvc项目。额外的好处是您不需要更改项目的CMake文件来解决这个问题。

答案 2 :(得分:0)

您可以使用以下代码段使用默认的cmake版本构建禁用2级优化。这仍然会从未优化(尚未发布)的应用程序代码中选择发行版opencvworld(已进行全面优化)。使用此功能,我们可以逐行浏览应用程序的代码,并具有完全可变的可见性。以及调试版本,再加上与调试opencv链接或混合CRT或对涉及的所有组件进行完整调试的需求。 / p>

path