查找带有 Anaconda cmake 前缀的 boost-python3
Finding boost-python3 with Anaconda cmake prefix
DLDR如何将 cmake 指向 boost-python3 库?它不会由 cmake 自动检测到。
我正在尝试使用提供的 cmake 为 Python 3.6 构建 caffe。
我的系统规格:
- Python 3.6.5,Anaconda 自定义(64 位(
- Mac OS 10.13.6
- 没有库达
我已经用brew安装了boost,例如
brew install boost boost-python3
我可以使用find / -name libboost* 2>/dev/null
看到提升库。它们出现在三个目录中
/usr/local/Cellar/boost/1.67.0_1/lib/
/usr/local/lib/
-> 指向上面的符号链接- boost-python3 已
/usr/local/Cellar/boost-python/1.67.0/lib/
如果我运行cmake -DCMAKE_PREFIX_PATH=<anaconda_env_path> -D python_version=3
,我会在输出的顶部得到这个
-- Boost version: 1.67.0
-- Found the following Boost libraries:
-- system
-- thread
-- filesystem
-- chrono
-- date_time
-- atomic
但再往下,我也得到了
CMake Warning at /Users/Mauceri/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1723 (message):
No header defined for python-py365; skipping header check
Call Stack (most recent call first):
cmake/Dependencies.cmake:157 (find_package)
CMakeLists.txt:49 (include)
-- Could NOT find Boost
CMake Warning at /Users/Mauceri/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1723 (message):
No header defined for python-py36; skipping header check
Call Stack (most recent call first):
cmake/Dependencies.cmake:164 (find_package)
CMakeLists.txt:49 (include)
-- Could NOT find Boost
CMake Warning at /Users/Mauceri/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1723 (message):
No header defined for python-py3; skipping header check
Call Stack (most recent call first):
cmake/Dependencies.cmake:164 (find_package)
CMakeLists.txt:49 (include)
-- Could NOT find Boost
-- Could NOT find Boost
-- Python interface is disabled or not all required dependencies found. Building without it...
类似于Cmake找不到Boost,我尝试添加
-DBOOST_ROOT=/usr/local/Cellar/boost/1.67.0_1/lib/ -DBoost_DEBUG=1
到 cmake 命令。在生成的输出中,以下内容使用 boost_python-py365、boost_python-py36、boost_python-py3 和 boost_python 重复三次:
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1121 ] _boost_TEST_VERSIONS = 1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65;1.64.0;1.64;1.63.0;1.63;1.62.0;1.62;1.61.0;1.61;1.60.0;1.60;1.59.0;1.59;1.58.0;1.58;1.57.0;1.57;1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1123 ] Boost_USE_MULTITHREADED = TRUE
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1125 ] Boost_USE_STATIC_LIBS =
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1127 ] Boost_USE_STATIC_RUNTIME =
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1129 ] Boost_ADDITIONAL_VERSIONS =
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1131 ] Boost_NO_SYSTEM_PATHS =
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1199 ] Declared as CMake or Environmental Variables:
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1201 ] BOOST_ROOT = /usr/local/Cellar/boost/1.67.0_1/include/
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1203 ] BOOST_INCLUDEDIR =
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1205 ] BOOST_LIBRARYDIR =
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1207 ] _boost_TEST_VERSIONS = 1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65;1.64.0;1.64;1.63.0;1.63;1.62.0;1.62;1.61.0;1.61;1.60.0;1.60;1.59.0;1.59;1.58.0;1.58;1.57.0;1.57;1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1306 ] location of version.hpp: /usr/local/Cellar/boost/1.67.0_1/include/boost/version.hpp
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1330 ] version.hpp reveals boost 1.67.0
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1416 ] guessed _boost_COMPILER =
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1426 ] _boost_MULTITHREADED = -mt
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1502 ] _boost_RELEASE_ABI_TAG = -
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1504 ] _boost_DEBUG_ABI_TAG = -d
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1567 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH_boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1756 ] Searching for PYTHON_LIBRARY_RELEASE: boost_python-mt-1_67;boost_python-mt;boost_python
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:400 ] Boost_LIBRARY_DIR_RELEASE = /usr/local/Cellar/boost/1.67.0_1/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1809 ] Searching for PYTHON_LIBRARY_DEBUG: boost_python-mt-d-1_67;boost_python-mt-d;boost_python-mt;boost_python
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:400 ] Boost_LIBRARY_DIR_DEBUG = /usr/local/Cellar/boost/1.67.0_1/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1883 ] Boost_FOUND = 1
Could NOT find Boost
Boost version: 1.67.0
Boost include path: /usr/local/Cellar/boost/1.67.0_1/include
Could not find the following Boost libraries:
boost_python
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.
因此,我认为 boost-python 路径是缺少的。我也尝试添加-DBOOST_LIBRARYDIR
,但这似乎并没有改变任何东西。
FindBoost 文档包含有关 boost-python 的评论
请注意,Boost Python 组件需要 Python 版本后缀 (Boost 1.67 及更高版本(,例如 python36 或 python27 版本。 分别针对 Python 3.6 和 2.7 构建。这也适用于 使用 Python 的其他组件,包括 mpi_python 和 numpy。 早期的 Boost 版本可能使用特定于发行版的后缀,例如 2、3 或 2.7。这些也可以用作后缀,但请注意它们 不便携。
我注意到 boost-python3 库的后缀为 37 (libboost_python37.a(,所以我也尝试在 python 3.7 中使用 anaconda 环境,但同样的错误仍然存在。
如何让我的 cmake 找到 boost-python3 库?
在CMake 3.12中引入了FindPython2和FindPython3。这重新设计了查找Python的整个处理过程,也改进了对Anaconda的支持。
当您使用的是 Boost 1.67 时,我建议您无论如何都切换到 CMake 3.12 或更高版本:https://stackoverflow.com/a/42124857/2799037
如果可能,请使用可用的最新 CMake 版本。
看看 boost-python 包带来了什么文件。
brew ls --verbose boost-python3
其中应该有boost-pythonXX-config.cmake
文件或类似的东西。问题可能出在版本上。对于find_package
请使用与此文件名对应的正确包名称。
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- 查找带有 Anaconda cmake 前缀的 boost-python3
- n-ary布尔语法从中缀到前缀的Boost::Spirit转换?
- 使用 python3 为 msvc 构建 boost python - 链接器错误
- 在 Windows 上使用 Boost python3 和 numpy3 库时,VS2015 中LNK2019未解析的外
- 与 boost.python 和 python3 链接时出现问题
- Boost.Spirit解析可选前缀
- 安装 Python3.6 版本的 Boost-Python3
- 使用boost.program_options创建一个前缀命令
- 为什么fetch_add使用锁前缀,而fetch_and在boost atomics中使用cmpxchg
- 如何在boost regex_search中获取原始字符串前缀
- 为什么某些 Boost 函数不需要以命名空间为前缀