我在用Cmake编译Boost Python时遇到问题。手动编译时,一切正常。以下是我如何设置和运行所有内容:
安装Python3.5:
sudo apt-get install python3-dev
从http://www.boost.org/下载Boost的最新版本
使用正确的标志运行引导:
./bootstrap.sh --with-python=python3.5
在目录中编译Boost:
./b2
将Boost头安装到/usr/local/include,将libs安装到/usr/lib/x86_64-linux-gnu
sudo ./b2 install
使用适当的标志编译示例:
g++ greet_binding.cpp -I/usr/include/python3.5m -I/usr/local/include -lboost_python-py35 -lpython3.5m -o greet.so -shared -fPIC
启动Python解释器:
$ python3
import greet
greet.say_greeting("Foo")
Hello, Foo!
问候语绑定.cpp:
#include <iostream>
#include <boost/python/def.hpp>
#include <boost/python/module.hpp>
using namespace std;
namespace bp = boost::python;
void say_greeting(const char* name)
{
cout << "Hello, " << name << "!\n";
}
BOOST_PYTHON_MODULE(greet)
{
bp::def("say_greeting", say_greeting);
}
但是,当我试图设置一个简单的CmakeLists.txt文件来编译它时,从Python导入compiled.so时会出错。
CMakeLists.txt:
cmake_minimum_required( VERSION 2.8.3 )
project ( boost-python-3.5-examples )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
-g -std=c++14 \
-I/usr/include/python3.5m \
-I/usr/local/include \
-lboost_python-py35 \
-lpython3.5m \
-fPIC" )
add_library( greet SHARED greet_binding.cpp )
编译得很好,然后我在build目录中启动python解释器:
$ python3
import libgreet
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /home/james/Programming/boost-python-3.5-examples/build/libgreet.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
我做错什么了?
目前没有回答
相关问题 更多 >
编程相关推荐