У меня есть проект, который использует CMake для выполнения сборки на платформах Linux и Windows. Некоторые из компонентов проекта требуют некоторых библиотек Boost. Многие из компонентов построены как общие библиотеки (.dll/.so). Когда я установил Boost, я решил создать общие библиотеки.CMake: сборка Visual Studio ищет неправильную библиотеку
Вот проблема:
После запуска CMake на Windows, openening решение VS генерироваться и запуска сборки, компоненты, которые имеют зависимость от Boost, завершаться с ошибкой, что библиотека не может быть найден. Например:
LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-gd-1_58.lib'
Достаточно, нет файла с таким именем в каталоге Boost lib. Там являются файлы общей библиотеки для этой библиотеки: boost_thread-vc100-mt-gd-1_58.dll
(и .lib
).
Я предполагаю, что вариант «lib ...» представляет собой статическую библиотеку. Почему он ищет это, когда я указал не использовать статические библиотеки из Boost? На стороне Linux нет проблем.
Вот некоторые выдержки из моих файлов CMakeLists.txt: уровень
Проект:
...
# Set to use shared libraries from Boost.
set(Boost_USE_STATIC_LIBS OFF)
#set(Boost_USE_STATIC_RUNTIME OFF) <- I also tried with this uncommented - no difference
#set(Boost_DEBUG ON)
if(WIN32)
find_package(Boost 1.58 REQUIRED system thread date_time chrono)
elseif(UNIX)
find_package(Boost 1.58 REQUIRED)
endif()
include_directories(${Boost_INCLUDE_DIRS})
...
компонент, который нуждается в форсиро-
set(source_files
...)
# Create library from source files.
add_library(lib_target SHARED ${source_files})
target_link_libraries(lib_target ${Boost_LIBRARIES})
Похоже, кто-то еще было то же самое (или аналогичный) проблема: cmake can't find boost libraries because it looks for the wrong file names. Я построил Boost с помощью link=shared
.
Какую версию CMake вы используете? Вы заглянули в Модули/FindBoost.cmake, чтобы узнать, как они на самом деле находят библиотеки? Иногда скрипты CMake могут быть ошибочными; альтернативно, вы можете реализовать поиск библиотек в сценарии своего приложения вместо того, чтобы полагаться на FindBoost из CMake. – Archie
Я использую CMake 3.2.2. Я не смотрел модуль - не уверен, что пойму, на что я смотрю. –