CMake无法找到BOOST库。

67

我尝试了以下所有方法:

  1. 配置环境变量
  2. 进行全新构建
  3. 从源代码重新安装BOOST
  4. 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's 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's headers.

Boost的源代码目录:/usr/local/src/boost_1_45_0。Boost库路径:/usr/local/lib。Boost头文件:/usr/local/include/boost

这里是bashrc文件

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=

@Fraser:http://pastebin.com/cPRNegEi 顺便说一下,我的boost版本是1_45_0。 - Amit Pal
3
似乎没有获取环境变量。请查看输出的第 8-10 行。您可以尝试将它们作为 CMake 变量传递。甚至只传递 BOOST_ROOT 可能就足够了:cmake . -DBOOST_ROOT=/usr/local - Fraser
1
很好知道Boost问题是什么。至于Python交叉编译,我不能提供太多帮助。看起来你可以通过编辑CMakeLists.txt文件的第114行左右来禁用CMake尝试查找Python,但如果他们已经将其设置为必需,那么它可能会在其他地方无条件地使用,并且您将在那一点上遇到失败。就像我说的,也许是时候提一个新问题了 :-) - Fraser
6
@阿米特帕尔 请你添加一个答案而不是将答案编辑到你的问题中,这样人们就可以看到问题已经得到了回答。 - Andreas Haferburg
6
最后一个编辑下面的那行解决了问题吗?如果是的话,回答你自己的问题,这样人们就会知道问题已经得到解答,正如Andreas Haferburg在他的评论中所说。 - Patricia
显示剩余14条评论
8个回答

57

尝试使用以下库完成cmake过程:

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

8
对我来说,缺少libboost-all-dev并且它有所帮助。 - Zbyszek
16
我也安装了libboost-all-dev软件包,解决了Cmake搜索Boost系统范围内的问题。 - loretoparisi

17

我正在使用这个来在我的CMakeLists.txt中设置boost。尝试类似的方法(确保更新到你的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_ROOTBOOST_INCLUDEDIRBOOST_LIBRARYDIR)。对于我来说,在cmake > 2.6上可以使用。


14

我第一次想在Python上安装LightGBM(GPU版本)时,也遇到了同样的错误。

你可以通过这个命令行简单地解决它:

sudo apt-get install cmake libblkid-dev e2fslibs-dev libboost-all-dev libaudit-dev
boost库将被安装,您可以继续进行安装过程。

1
对我来说,安装libboost-all-dev解决了这个问题。 - prasad

1
感谢Paul-g的建议。就我而言,我的情况有些不同。
我按照https://www.boost.org/doc/libs/1_59_0/more/getting_started/unix-variants.html的步骤安装了Boost。
然后我在“FindBoos.cmake”中添加了PATH目录,该文件位于/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)

1

看起来答案在评论和编辑中,但为了澄清,这应该适用于您:

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不会影响你的环境变量。

1
我想指出的是,FindBoost宏可能正在寻找早期版本,例如1.58.0,而您可能已经安装了1.60.0。我建议打开您要构建的任何内容中的FindBoost宏,并检查是否是这种情况。您可以简单地编辑它以包含您特定的版本。(这就是我的问题所在。)

0

简短回答长话,如果您在自定义路径中安装boost,则所有头文件必须在${path}/boost/中。

如果您设置了BOOST_ROOT/BOOST_INCLUDEDIR,但cmake无法找到所请求的Boost库,请检查cmake install location path_to_cmake/share/cmake-xxx/Modules/FindBoost

cmake将在BOOST_ROOT中的boost/config.hpp中查找Boost_INCLUDE_DIR。这意味着您的boost头文件必须在${path}/boost/中,任何其他格式(例如${path}/boost-x.y.z)都不适用于CMakeLists.txt中的find_package


0

我在alpine docker容器中遇到了同样的问题,我的解决方案是添加boost-dev apk库,因为libboost-dev不可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接