【问题标题】:CMake is not able to find BOOST librariesCMake 无法找到 BOOST 库
【发布时间】:2014-08-02 02:59:51
【问题描述】:

我尝试了以下所有方法:

  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 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=

【问题讨论】:

  • 如果你做cmake . -DBoost_DEBUG=ON,你能显示CMake的输出吗?
  • 看起来它没有拾取环境变量。请参阅输出的第 8-10 行。您可以尝试将这些作为 CMake 变量传递。也许即使只是 BOOST_ROOT 就足够了:cmake . -DBOOST_ROOT=/usr/local
  • 很高兴知道 Boost 问题是什么。至于交叉编译时的Python,我真的帮不上什么忙。看起来您可以通过在第 114 行附近编辑 CMakeLIsts.txt 文件来禁用 CMake 尝试查找 Python,但如果他们已经要求它,可能它正在无条件地在其他地方使用,然后您就会失败观点。就像我说的,可能是时候提出一个新问题了:-)
  • @AmitPal 请自己添加答案,而不是在问题中编辑答案,这样人们就可以看到问题已得到解答。
  • @AmitPal - EDIT 下的最后一行是否解决了问题?如果是,那么请回答您自己的问题,以便人们回答问题,正如 Andreas Haferburg 在上面的评论中所说。

标签: c++ bash boost cmake


【解决方案1】:

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

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

【讨论】:

  • 对我来说 libboost-all-dev 不见了,但它有所帮助。
  • 我以及libboost-all-dev 包解决了-- Could NOT find Boost Cmake 问题以在系统范围内搜索提升。
【解决方案2】:

我正在使用它在我的CMakeLists.txt 中设置来自 cmake 的提升。尝试类似的方法(确保更新您的 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。

【讨论】:

    【解决方案3】:

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

    你可以用这个命令行简单地修复它:

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

    boost 库将被安装,您可以继续安装过程。

    【讨论】:

    • 为我安装 libboost-all-dev 修复问题,
    【解决方案4】:

    似乎答案在 cmets 中并作为编辑,但澄清这应该适合你:

    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 的建议。就我而言,这有点不同。

        我按照以下步骤 5 安装了 Boost:https://www.boost.org/doc/libs/1_59_0/more/getting_started/unix-variants.html

        然后我在位于 /usr/local/share/cmake-3.5/Modules 的“FindBoos.cmake”中添加 PATH 目录:

        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】:

          简而言之,如果您在自定义路径中安装 boost,则所有头文件都必须在 ${path}/boost/ 中。

          如果你想知道为什么在你设置了BOOST_ROOT/BOOST_INCLUDEDIR之后cmake找不到请求的Boost库,你可以查看cmake install location path_to_cmake/share/cmake-xxx/Modules/FindBoost

          cmake 将在 boost/config.hpp 中找到 Boost_INCLUDE_DIRBOOST_ROOT 中。这意味着你的 boost 头文件必须是${path}/boost/,任何其他格式(如${path}/boost-x.y.z)都不适合CMakeLists.txt中的find_package

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-06-23
              • 2011-12-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多