2013-07-25 5 views
3

У меня возникли проблемы с привязкой к отладочной версии моей библиотеки. Я использую CMake сделать библиотеку:Ссылка на отладочную версию библиотеки с CMake

project(myLib) 
... 
add_library(myLib SHARED ${SOURCES}) 

запускает построить два раза, чтобы получить освобождение и отладочную версию моего Lib. Затем я добавляю суффикс 'd' к имени библиотеки debug lib и имеет myLib.dll и myLibd.dll.

В моем приложении я явно связать против DLL отладки:

project(myApp) 
add_executable(myApp WIN32 ${SOURCES}) 
target_link_libraries(myApp myLibd.dll) 

Сборка завершается успешно, но когда я открываю полученный файл ех с Dependency Walker я получаю неразрешенную зависимость к myLib.dll файлу, даже несмотря на то, отладочная версия (myLibd.dll) находится в той же папке.

Итак, почему мое приложение пытается использовать версию моего lib во время выполнения? И как правильно привязать версию отладки?

+0

вы используете MinGW? Кроме того, как вы переименовываете 'myLib.dll' в' myLibd.dll'? – Fraser

+0

Да, я использую MinGW. Я переименую файл lib вручную, когда он скомпилирован. – hank

ответ

12

Нельзя переименовывать файл вручную. Использование CMake в CMAKE_DEBUG_POSTFIX variable или DEBUG_POSTFIX target property вместо:

add_library(myLib SHARED ${SOURCES}) 
set_target_properties(mylib PROPERTIES DEBUG_POSTFIX "d") 

[...] 
add_executable(myApp WIN32 ${SOURCES}) 
target_link_libraries(myApp myLib) 
+0

Спасибо, это сработало. Поэтому я не могу просто переименовать свои файлы lib в то, что хочу, и связать их с ними? – hank

+1

@hank Переименование '.lib' будет путать CMake, но вы все равно сможете скомпилировать и запустить программу. С другой стороны, переименование '.dll' вызовет проблемы, поскольку это имя [hardcoded в файле lib lib] (http://stackoverflow.com/questions/477461/when-building-a-dll-file-does- сгенерированный Пб-файлы содержат-библиотеку DLL-имя-). – ComicSansMS

+0

@ComicSansMS, как это сделать в Linux? Когда я компилирую в режиме выпуска, библиотека загружается во время выполнения. Когда он компилируется в режиме отладки, я получаю сообщение об ошибке «Ошибка при загрузке совместно используемых библиотек». – madduci

Смежные вопросы