Cmake找不到boost_python
我正试图在我的MacOS High Sierra上构建这个简单的boost python演示 以下是hello\u ext.cppCmake找不到boost_python,python,c++,boost-python,Python,C++,Boost Python,我正试图在我的MacOS High Sierra上构建这个简单的boost python演示 以下是hello\u ext.cpp的内容: #include <boost/python.hpp> char const* greet() { return "hello, world"; } BOOST_PYTHON_MODULE(hello_ext) { using namespace boost::python; def("greet", greet); } 我想我
的内容:
#include <boost/python.hpp>
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
我想我需要安装python。Boost 1.69已经安装,我确实brew安装了Boost python
,效果很好。执行brew列表| grep'boost'
列出boost
和boostpython
但是,从build
目录执行cmake..
会产生以下问题:
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.
我在这里遗漏了什么?来自:
请注意,BoostPython组件需要Python版本后缀(Boost1.67和更高版本),例如分别针对Python 3.6和2.7构建的版本使用python36或python27。这也适用于使用Python的其他组件,包括mpi_Python和numpy。早期的Boost版本可能会使用特定于发行版的后缀,如2、3或2.7。它们也可以用作后缀,但请注意它们不可移植
您发现的示例可能使用了旧版本的Boost。因此,您可能需要更改此行:
find_package(Boost COMPONENTS python27 REQUIRED)
要将正确的python版本传递给find_package(Boost)
,我建议从系统上找到的python版本中提取它
find_package(PythonLibs 3.6 REQUIRED)
# Extract major/minor python version
string(REPLACE "." ";" VERSION_LIST ${PYTHONLIBS_VERSION_STRING})
list(GET VERSION_LIST 0 PYTHONLIBS_VERSION_MAJOR)
list(GET VERSION_LIST 1 PYTHONLIBS_VERSION_MINOR)
find_package(Boost COMPONENTS python${PYTHONLIBS_VERSION_MAJOR}${PYTHONLIBS_VERSION_MINOR} REQUIRED)
第一行的3.6是最低版本,它在我的机器上找到了python38
boost模块,原因是/usr/lib64/libpython3.8。因此
也许可以在你的CMakeList.txt中发布与boost\u python相关的部分,以便我们可以仔细查看?我怀疑boost_python库不在LD_library_路径中,也不在您的MacOS版本中。我现在发布了问题中的所有代码,从而使其成为一个完整的代码示例。运行cmake--trace
或--trace expand
对于调试cmake逻辑非常有用。在CMake stock脚本中找到错误消息,然后将代码与跟踪中的相应位置进行比较,以查看发生了什么。您可以尝试使用Find_包(需要Boost COMPONENTS python27)
来代替它吗?Find_包(需要Boost COMPONENTS python27)
修复了它:D.很好。谢谢看起来我应该在要求cmake查找python时编写正确的python版本这不是一个非常通用的解决方案。如果我想使用默认的python 3库,但不介意使用python的哪个次要版本,该怎么办?@AndréOffringa也许您可以提供另一个指向该库的符号链接。但这可能属于“不可移植”的范畴。对于将在多个平台上发布的软件包,这不是一个选项。对于这一点,一个可移植的解决方案仍然非常有用,但据我所知,Boost Python似乎没有提供它,这是不幸的。也许你可以在他们的邮件列表或问题跟踪器上找到一些关于这一点的信息。否则,你可以考虑发布一个新的问题…
find_package(PythonLibs 3.6 REQUIRED)
# Extract major/minor python version
string(REPLACE "." ";" VERSION_LIST ${PYTHONLIBS_VERSION_STRING})
list(GET VERSION_LIST 0 PYTHONLIBS_VERSION_MAJOR)
list(GET VERSION_LIST 1 PYTHONLIBS_VERSION_MINOR)
find_package(Boost COMPONENTS python${PYTHONLIBS_VERSION_MAJOR}${PYTHONLIBS_VERSION_MINOR} REQUIRED)