2014-06-17 11 views
7

Aralarında OpenCV aralarında yarım düzine kütüphanesi olan bir projem var.
Sürüm değişkeni çökerken, Hata Ayıkı çalışıyorken (yalnızca çok daha yavaş), projemi RelWithDebInfo yapılandırmasında derlemek istedim.
Ancak, Release yerine OpenCV kitaplıklarının Debug sürümü dahil edilir (OpenCV, RelWithDebInfo varyantına sahip değildir). Bu gibi hatalar bağlayan yol açar:CMake RelWithDebInfo linkler Debug libs için

opencv_core249d.lib (alloc.obj): hata LNK2038: 'RuntimeLibrary' için tespit edilen uyumsuzluğu: MyProject.obj içinde 'MD_DynamicRelease' değeri eşleşmiyor değer 'MDd_DynamicDebug'

Bu sorun nasıl çözülür?

+0

Bunu, Windows'ta INSTALL hedefini hiçbir zaman kullanmadan çözerim. Bunun yerine, PROJECTNAME_DIR değişkenlerini kitaplığı oluşturduğunuz kök klasöre yönlendirin. Kullandığım derleyiciyle tüm bağımlılıkları yapıyorum ve asla ikili paketler kullanmam. Kaynaktan opencv oluşturursanız yine de RelWithDebInfo yapılandırmasını ortadan kaldırır mı? – drescherjm

+0

OpenCV kaynağından oluşturdum. Önceden derlenmiş OpenCV ile bu sorunu yaşamadım. –

cevap

14

Çözüm: FIND_PACKAGE(OpenCV) çağrısının ardından, CMakeLists.txt eklemek: Ben Cenan tarafından yukarıdaki cevabı kullanılan ancak bazı opencv kütüphaneleri bu görmezden ve hala hata ayıklama bağlantı olduğunu tespit ettik

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

Bu, beni çok fazla arama ve çalışma kurtardı. Teşekkürler :) – Baiz

+0

Bu, benim için çoğu zaman işe yarıyor ama bazı hedefler hala debug kütüphaneleri olarak geliyor. Olası hedeflere ulaştığından emin olmak için her olası opencv hedefini listeledim. –

1

! Bu, opencv için karma sürüm ve hata ayıklama kitaplıklarını birbirine bağlayan bir msvc projesi ile sonuçlanır. Benim çözümüm, OpenCVModules-release.cmake dosyasının bir kopyası olan opencv kurulumunuzun lib dir'inde yeni bir OpenCVModules-relwithdebinfo.cmake yaratmaktı. Sonra tüm referansları RELWITHDEBINFO ile RELEASE olarak değiştirin. Bu, tamamen opencv serbest bırakma lib'lerine bağlanan bir msvc projesi oluşturur. Ek olarak, projenizin CMake dosyalarını bunun hesabını değiştirmek için değiştirmeniz gerekmez.

+0

CMake için bir hata raporu gönderdiniz mi? Bir problemi, etrafınızdaki işlerden daha iyi çözmeniz tavsiye edilir. –

+0

Bu bir CMake sorunu veya OpenCV'nin CMake komut dosyalarıyla ilgili bir sorun olup olmadığından emin olamıyorum. Hala zamanım olduğunda daha fazla araştırıyorum. –