【问题标题】:Force g++ to look for Boost in one location ignoring other settings强制 g++ 在一个位置寻找 Boost 忽略其他设置
【发布时间】:2017-02-23 19:40:06
【问题描述】:

我正在尝试从Ubuntu 16.04 的源代码编译图形工具,但问题是它无法获取正确的 boost 库。我正在尝试针对 anaconda python 编译它,因此必须向./configure 提供额外的标志。我尝试运行以下命令:

./configure CXX="g++-5" CXXFLAGS="-std=gnu++14 -Wno-unused-local-typedefs" CPPFLAGS="-I/home/pmj27/anaconda2/lib" PYTHON="/home/pmj27/anaconda2/bin/python2.7" CAIROMM_LIBS="-L/home/pmj27/anaconda2/include/cairomm-1.0/cairomm" --enable-openmp

但是这会失败,终端窗口中会显示以下错误消息

checking for boostlib >= 1.54.0... configure: We could not detect the boost libraries (version 1.54 or higher). If you have a staged boost library (still not installed) please specify $BOOST_ROOT in your environment and do not give a PATH to --with-boost option.  If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.
checking whether the Boost::Python library is available... no
configure: error: No usable boost::python found

尽管libboost_python.so 驻留在/home/pmj27/anaconda2/lib 中。

config.log的错误信息好像是:

configure:19187: g++-5 -c -fopenmp -O3 -fvisibility=default -fvisibility-inlines-hidden -Wno-deprecated -ftemplate-depth-250  -DNDEBUG -Wall -Wextra -ftemplate-backtrace-limit=0 -std=gnu++14 -Wno-unused-local-typedefs -I/home/pmj27/anaconda2/lib -I/usr/include conftest.cpp >&5
conftest.cpp:35:33: fatal error: /usr/local/include/boost/version.hpp: Permission denied
compilation terminated.

所以似乎正在发生的事情是它首先查看/usr/local/include/boost,这是错误的位置,然后失败了。我该如何阻止它这样做? (我想这就是 graph-tool 无法编译的原因。)

我也试过了

./configure CXX="g++-5" CXXFLAGS="-std=gnu++14 -Wno-unused-local-typedefs -I/home/pmj27/anaconda2/lib" PYTHON="/home/pmj27/anaconda2/bin/python2.7" CAIROMM_LIBS="-L/home/pmj27/anaconda2/include/cairomm-1.0/cairomm" --enable-openmp

但是现在/home/pmj27/anaconda2/lib 似乎出现在/usr/local/include/boost 之前,但仍然失败并显示相同的错误消息:

configure:19104: checking for boostlib >= 1.54.0
configure:19187: g++-5 -c -fopenmp -O3 -fvisibility=default -fvisibility-inlines-hidden -Wno-deprecated -ftemplate-depth-250  -DNDEBUG -Wall -Wextra -ftemplate-backtrace-limit=0 -std=gnu++14 -Wno-unused-local-typedefs -I/home/pmj27/anaconda2/lib  -I/usr/include conftest.cpp >&5
conftest.cpp:35:33: fatal error: /usr/local/include/boost/version.hpp: Permission denied
compilation terminated.

【问题讨论】:

  • 在 /usr/local 中读取某些内容时收到“权限被拒绝”的事实意味着您安装它时使用了错误的权限。
  • 是的,我可以通过使用sudo 来克服这个问题。我试图阻止使用这些 boost 库,因为我需要使用 anaconda 库,以防止在运行 graph-tool 时出现 c++ 签名不匹配。
  • 你没有克服它,你可能是在你不应该使用 sudo (例如,以 root 身份运行)时导致问题的。像这样使用 sudo 是不好的形式,也是一个坏主意。您遇到的部分问题是由此造成的。

标签: c++ boost g++ graph-tool


【解决方案1】:

首先:“我们无法检测到 boost 库” 并不意味着它无法找到 Boost::Python 的共享库。就是找不到boost本身,也就是:它的所有头文件。

鉴于此,我不得不质疑:

-I/home/pmj27/anaconda2/lib

里面是否包含 boost 头文件?因为您描述的是 .so 文件驻留在那里。

处理完 boost 包含问题后,您可能需要一组不同的标志指向 .so 库。这可能取决于您希望如何部署它,但沿着这条线:

-L/home/pmj27/anaconda2/lib -lboost_python -Wl,-rpath=/home/pmj27/anaconda2/lib

但那是未来。重点先获取正确的boost头文件!

【讨论】:

  • 据我所知,头文件似乎驻留在/home/pmj27/anaconda2/include/boost 中(它包含一堆.hpp 文件)。
  • 那你需要-I/home/pmj27/anaconda2/include
猜你喜欢
  • 2010-09-14
  • 2013-10-07
  • 2011-09-26
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 2017-01-13
  • 2012-07-01
相关资源
最近更新 更多