Не удалось связать с расширением библиотеки с созданным проектом CMake файла проекта для MSVC9
Я пытаюсь создать приложение с библиотекой boost, создав файлы проекта MSVC9.0 с помощью CMake.
Я получаю следующую ошибку:
Ошибка 3 фатальной ошибки LNK1104: невозможно открыть файл 'libboost_system-vc90-mt-gd-1_44.lib'
Вот конфигурация CMake
cmake_minimum_required(VERSION 2.8)
PROJECT( TestProject)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
set(BOOST_ROOT "D:/boost_1_44_0")
set(Boost_USE_MULTITHREADED ON)
FIND_PACKAGE( Boost 1.44.0 REQUIRED unit_test_framework system)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${BOOST_ROOT})
LINK_DIRECTORIES(${LINK_DIRECTORIES} "D:/boost_1_44_0/stage/lib")
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
SET(RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
ADD_EXECUTABLE(testapp
main.cpp)
TARGET_LINK_LIBRARIES(testapp
${Boost_SYSTEM_LIBRARY}
)
SET_TARGET_PROPERTIES( testapp PROPERTIES DEBUG_POSTFIX "d" )
Я создал boost для статических и общих (debug и release) со следующими параметрами.
bjam toolset=msvc variant=debug link=shared runtime-link=shared threading=multi --build-type=complete stage
bjam toolset=msvc variant=release link=shared runtime-link=shared threading=multi --build-type=complete stage
bjam toolset=msvc variant=debug link=static runtime-link=static threading=multi --build-type=complete stage
bjam toolset=msvc variant=release link=static runtime-link=static threading=multi --build-type=complete stage
Я не уверен, что мне не хватает в конфигурации. Какие-либо предложения?
Спасибо.
Ответы
Ответ 1
Прежде всего, вы проверили, действительно ли существует "libboost_system-vc90-mt-gd-1_44.lib" в вашем сценарии "D:/boost_1_44_0/stage/lib"?
Вторым: наиболее распространенная проблема, с которой я столкнулся с Boost и CMake find_package (Boost), была помехами для автоматической привязки. Вы можете отключить его, добавив определение флагов компиляции
add_definitions( -DBOOST_ALL_NO_LIB )
но тогда вам, вероятно, потребуется указать, хотите ли вы ссылаться на динамическую или статическую версию
set( Boost_USE_STATIC_LIBS ON ) # or Off, depending on what you want
find_package( Boost 1.44.0 REQUIRED unit_test_framework system)
Конечно, вы всегда можете проверить созданные визуальные файлы студии, чтобы увидеть, какие библиотеки ссылок фактически добавлены в ваш проект.
Ответ 2
После многих попыток я смог скомпилировать проект с Boost в Windows.
Вот источник CMakeLists.txt:
cmake_minimum_required (VERSION 2.6)
project (SendCommand)
include_directories(./)
set(BOOST_ROOT F:/boost_1_55_0/)
set(BOOST_INCLUDEDIR F:/boost_1_55_0/)
set(BOOST_LIBRARYDIR F:/boost_1_55_0/lib32-msvc-10.0/)
set(Boost_INCLUDE_DIRS F:/boost_1_55_0/)
set(Boost_LIBRARY_DIRS F:/boost_1_55_0/lib32-msvc-10.0/)
add_definitions(-DBOOST_ALL_NO_LIB)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.55.0 REQUIRED COMPONENTS system thread)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(SendCommand send_command.cpp ivdlp_packet.cpp)
target_link_libraries(SendCommand ${Boost_LIBRARIES})
Для получения дополнительной информации вы можете использовать документ, который я написал:
https://docs.google.com/document/d/1nE7kYBRQAWbR4rGkMmA5-Hg88M9vS_kAjO4Tc9Rq5zU/pub