#c #boost #cmake
#c #повышение #cmake
Вопрос:
Теперь мне нужно использовать " find_package(Boost 1.62.0 COMPONENTS program_options serialization system filesystem thread REQUIRED)"
для включения некоторых библиотек в мою программу, но моя библиотека boost установлена в другом каталоге, а не в каталоге defualt ** (usr / include ..) **. Теперь возникают следующие ошибки:
CMake Error at /usr/share/cmake/Modules/FindBoost.cmake:1138 (message):
Unable to find the requested Boost libraries.
Boost version: 1.41.0
Boost include path: /usr/includ
Detected version of Boost is too old.
Requested version was 1.62 (or
newer).
Я выдаю некоторое содержимое моего CMakelist.txt:
SET(BOOST_DIR /home/mingjli/folder_Mingjie/Software/boost_1.62.0/include/boost)
SET(BOOST_LIB /home/mingjli/folder_Mingjie/Software/boost_1.62.0/lib)
INCLUDE (${Source_Path}/IndexerLauncher.cmake NO_POLICY_SCOPE)
INCLUDE_DIRECTORIES(${BOOST_DIR})
LINK_DIRECTORIES(${BOOST_LIB})
INCLUDE_DIRECTORIES(${Source_Path})
ADD_EXECUTABLE (indexer_launcher ${IndexerLauncher})
TARGET_LINK_LIBRARIES (indexer_launcher nearest_search_lib)
target_link_libraries( indexer_launcher ${Boost_LIBRARIES} )
Спасибо!!
Ответ №1:
Boost version: 1.41.0
^^
Это означает, что у вас установлена версия boost 1.41.0, но вы запрашиваете 1.62.0. Вы можете обновить boost или изменить минимальные требования к версии boost:
find_package(Boost 1.41.0 COMPONENTS program_options serialization system filesystem thread REQUIRED)
^^
В вашем нет ничего действительно особенного, что вы должны иметь в своем CMakeLists.txt чтобы включить повышение. Вот пример, который работает для меня:
cmake_minimum_required(VERSION 2.8)
find_package(Boost REQUIRED filesystem system)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(mytarget ${Boost_LIBRARIES})
Обновить:
Если вы не можете обновить версию системы boost, вы можете установить boost в свою домашнюю папку:
- загрузить исходные тексты boost с www.boost.org
-
скомпилируйте и установите новый boost в ваш домашний каталог:
b2 toolset=gcc install --prefix=/home/user/boost
После компиляции boost вы можете использовать его из / home / user /boost:
cmake .. -DBOOST_ROOT=/home/user/boost
Комментарии:
1. Привет, я знаю, что ты имеешь в виду. Но мне нужно повышение 1.62, а не повышение 1.41. К сожалению, у меня нет разрешения на обновление повышения с 1.41 до 1.62, это проблема. @Evgeniy
2. @MingjieLi, вы можете установить новый boost в свою домашнюю папку. Проверьте обновления ответа
3. Привет, @Evgeniy, большое тебе спасибо, теперь все в порядке. Однако возникает новая проблема: ‘missing_parameter’ не является членом ‘boost::program_options::invalid_syntax’. Я проверил, что invalid_syntax действительно содержит элемент «missing_parameter»,
4. @MingjieLi, ваш код include_directories может быть неправильным. используйте include_directories(${Boost_INCLUDE_DIRS}) вместо INCLUDE_DIRECTORIES(${BOOST_DIR}) . Вы также можете отобразить включаемые каталоги с помощью message () и проверить, верны ли они
5. Эта проблема возникала раньше, ранее я думал, что эта проблема связана с повышением 1.41, поскольку в этой версии класс invalid_syntax не имеет элемента missing_parameter. Но в версии 1.62 есть этот элемент, поэтому я не знаю почему, есть ли у вас какие-либо идеи по этому поводу. проблема. Спасибо!