2014-06-17 12 views
7

Mam projekt, który łączy się z pół tuzina bibliotek, w tym OpenCV.
Od wersji Release się nie udaje, podczas gdy Debug działa dobrze (tylko o wiele wolniej), chciałem skompilować mój projekt w konfiguracji RelWithDebInfo.
Jednak wersja bibliotek OpenCV jest dołączana zamiast Release (OpenCV nie ma wersji RelWithDebInfo). Powoduje to powiązanie błędy, takie jak:Łącza CMake RelWithDebInfo z bibliotekami debugowania

opencv_core249d.lib (alloc.obj): error LNK2038: niedopasowanie wykryty 'RuntimeLibrary': 'wartość' MDd_DynamicDebug nie odpowiada wartości 'MD_DynamicRelease' w MyProject.obj

Jak rozwiązać ten problem?

+0

Rozwiązuję to, nie używając celu INSTALL w systemie Windows. Zamiast tego wskaż zmienne PROJECTNAME_DIR w folderze głównym, w którym została zbudowana biblioteka. Buduję też wszystkie zależności za pomocą kompilatora, którego używam i nigdy nie używam pakietów binarnych. Jeśli budujesz opencv ze źródła, to nadal eliminuje konfigurację RelWithDebInfo? – drescherjm

+0

Zbudowałem OpenCV ze źródła. Nie miałem tego problemu z wstępnie skompilowanym OpenCV. –

Odpowiedz

14

Rozwiązanie: dodaj do CMakeLists.txt, po wywołaniu FIND_PACKAGE(OpenCV):

set_target_properties(${OpenCV_LIBS} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE) 
+1

To zaoszczędziło mi wiele poszukiwań i pracy. Dzięki :) – Baiz

+0

To działa dla mnie przez większość czasu, ale niektóre cele wciąż są dostępne jako biblioteki debugowania. Wymieniłem każdy możliwy cel opencv, aby upewnić się, że jest on również zależny od celu. –

1

Użyłem powyższą odpowiedź za Dženan ale okazało się, że niektóre biblioteki OpenCV zignorować to i nadal odwołuje debug! W rezultacie powstaje projekt msvc, który łączy mieszane biblioteki release i debug dla opencv. Moim rozwiązaniem było stworzenie nowego OpenCVModules-relwithdebinfo.cmake w lib dir instalacji opencv, który jest kopią pliku OpenCVModules-release.cmake. Następnie zastępuje wszystkie odniesienia do RELEASE za pomocą RELWITHDEBINFO. To tworzy projekt msvc łączący się w całości z bibliotekami wersji opencv. Dodatkową korzyścią jest to, że nie trzeba zmieniać plików CMake projektu, aby to uwzględnić.

+0

Czy przesłałeś raport o błędzie dla CMake? Lepiej rozwiązać problem niż obejść go, co sugerujesz. –

+0

Nie mogę być pewien, czy jest to problem CMake, czy problem ze skryptami CMake OpenCV. Nadal badam sprawę, kiedy mam czas. –