Подтвердить что ты не робот

CMake не может найти библиотеки BOOST

Я пробовал все:

  • Настройка переменной среды
  • Создать новую сборку
  • Переустановите BOOST из источника
  • sudo apt-get install libboost-all-dev

Но все еще возникают следующие ошибки:

CMake Error at /usr/share/cmake-2.8/Modules/FindBoost.cmake:1131 (message):
 Unable to find the requested Boost libraries.

 Unable to find the Boost header files.  Please set BOOST_ROOT to the root
 directory containing Boost or BOOST_INCLUDEDIR to the directory containing
 Boost headers.
Call Stack (most recent call first):
   CMakeLists.txt:147 (find_package)


CMake Error at /usr/share/cmake-2.8/Modules/FindBoost.cmake:1131 (message):
Unable to find the requested Boost libraries.

Unable to find the Boost header files.  Please set BOOST_ROOT to the root
directory containing Boost or BOOST_INCLUDEDIR to the directory containing
Boost headers.

Каталог исходного кода для boost: /usr/local/src/boost_1_45_0 Boost Путь библиотеки: /usr/local/lib Файл заголовка Boost: /usr/local/include/boost

Вот bashrc file:

BOOST_ROOT="/usr/local/src/boost_1_45_0"
Boost_LIBRARY_DIRS="/usr/local/lib"
BOOST_INCLUDEDIR="/usr/local/src/boost_1_45_0"

Как решить эти ошибки? Я что-то пропустил?

Изменить:

cmake -DCMAKE_TOOLCHAIN_FILE=$ANDTOOLCHAIN -DBOOST_ROOT=/usr/local/src/boost_1_45_0 -DBOOST_INCLUDEDIR=/usr/local/include/boost -DBOOST_LIBRARYDIR=/usr/local/lib -DPYTHON_LIBRARIES=/usr/local/lib/python2.7 -DPYTHON_INCLUDE_DIRS=/usr/include/python2.7 -DCMA-DRDK_BUILD_PYTHON_WRAPPERS=
4b9b3361

Ответ 1

Попробуйте выполнить cmake-процесс со следующими libs:

sudo apt-get install cmake libblkid-dev e2fslibs-dev libboost-all-dev libaudit-dev

Ответ 2

Я использую это, чтобы настроить boost от cmake в моем CMakeLists.txt. Попробуйте что-то подобное (обязательно обновите пути к установке boost).

SET (BOOST_ROOT "/opt/boost/boost_1_57_0")
SET (BOOST_INCLUDEDIR "/opt/boost/boost-1.57.0/include")
SET (BOOST_LIBRARYDIR "/opt/boost/boost-1.57.0/lib")

SET (BOOST_MIN_VERSION "1.55.0")
set (Boost_NO_BOOST_CMAKE ON)
FIND_PACKAGE(Boost ${BOOST_MIN_VERSION} REQUIRED)
if (NOT Boost_FOUND)
  message(FATAL_ERROR "Fatal error: Boost (version >= 1.55) required.")
else()
  message(STATUS "Setting up BOOST")
  message(STATUS " Includes - ${Boost_INCLUDE_DIRS}")
  message(STATUS " Library  - ${Boost_LIBRARY_DIRS}")
  include_directories(${Boost_INCLUDE_DIRS})
  link_directories(${Boost_LIBRARY_DIRS})
endif (NOT Boost_FOUND)

Это будет либо поиск путей по умолчанию (/usr, /usr/local), либо путь, предоставленный через переменные cmake (BOOST_ROOT, BOOST_INCLUDEDIR, BOOST_LIBRARYDIR). Это работает для меня на cmake > 2.6.

Ответ 3

Я получил ту же ошибку, когда впервые захотел установить LightGBM на python (версия для GPU).

Вы можете просто исправить это с помощью этой командной строки:

sudo apt-get install cmake libblkid-dev e2fslibs-dev libboost-all-dev libaudit-dev

Установочные библиотеки будут установлены, и вы сможете продолжить процесс установки.

Ответ 4

кажется, что ответ находится в комментариях и как редактирование, но для уточнения это должно работать для вас:

export BUILDDIR='your path to  build directory here'
export SRCDIR='your path to source dir here'
export BOOST_ROOT="/opt/boost/boost_1_57_0"
export BOOST_INCLUDE="/opt/boost/boost-1.57.0/include"
export BOOST_LIBDIR="/opt/boost/boost-1.57.0/lib"
export BOOST_OPTS="-DBOOST_ROOT=${BOOST_ROOT} -DBOOST_INCLUDEDIR=${BOOST_INCLUDE} -DBOOST_LIBRARYDIR=${BOOST_LIBDIR}"
(cd ${BUILDDIR} && cmake ${BOOST_OPTS} ${SRCDIR})

вам нужно указать аргументы как аргументы командной строки или вы можете использовать для этого файл инструментальной привязки, но cmake не будет касаться ваших переменных окружения.

Ответ 5

Я просто хочу указать, что макрос FindBoost может искать более раннюю версию, например, 1.58.0, если у вас может быть установлен 1.60.0. Я предлагаю открыть макрос FindBoost из того, что вы пытаетесь построить, и проверить, если это произойдет. Вы можете просто отредактировать его, указав свою конкретную версию. (Это была моя проблема.)

Ответ 6

Спасибо Paul-g за ваш совет. С моей стороны это было немного по-другому.

Я установил Boost, выполнив шаг 5: https://www.boost.org/doc/libs/1_59_0/more/getting_started/unix-variants.html.

А затем я добавляю каталог PATH в "FindBoos.cmake", расположенный в /usr/local/share/cmake-3.5/Modules:

SET (BOOST_ROOT "../boost_1_60_0")
SET (BOOST_INCLUDEDIR "../boost_1_60_0/boost")
SET (BOOST_LIBRARYDIR "../boost_1_60_0/libs")

SET (BOOST_MIN_VERSION "1.55.0")
set (Boost_NO_BOOST_CMAKE ON)

Ответ 7

Попробуйте добавить -DBoost_DEBUG=TRUE в командную строку cmake чтобы увидеть, где FindBoost макрос FindBoost.

Ответ 8

Длинный ответ на короткий, если вы устанавливаете boost по пользовательскому пути, все заголовочные файлы должны быть в $ {path}/boost/.

если вы хотите узнать, почему cmake не может найти запрошенные библиотеки Boost после того, как вы установили BOOST_ROOT/BOOST_INCLUDEDIR, вы можете проверить cmake install location path_to_cmake/share/cmake-xxx/Modules/FindBoost.

cmake, который найдет Boost_INCLUDE_DIR в boost/config.hpp BOOST_ROOT в BOOST_ROOT. Это означает, что ваш файл заголовка boost должен находиться в ${path}/boost/, любой другой формат (например, ${path}/boost-xyz) не будет подходящим для find_package в CMakeLists.txt.

Ответ 9

У меня возникла та же проблема в док-контейнере Alpine, я решил добавить библиотеку apk boost-dev, потому что libboost-dev не был доступен.