使用 boost python 从 python 调用 C++:介绍性示例不起作用
Calling C++ from python using boost python: introductory example not working
我有兴趣使用 Boost.Python 从我的 Python 调用 C++ 函数
脚本。
这个例子 here 是 Boost python 主页上的一个介绍性例子,我无法 运行。有人可以帮我解决这个问题吗?
这是我试过的
我创建了一个名为 hello_ext.cpp 的文件,如下所示
#include <boost/python.hpp>
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
然后我编译成共享库如下
g++ -c -Wall -Werror -fpic hello_ext.cpp -I/usr/include/python2.7
g++ -shared -o libhello_ext.so hello_ext.o
我尝试 import hello_ext
的 ipython 解释器终于启动了
但收到以下错误消息。我哪里错了?
In [1]: import hello_ext
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-18c4d6548768> in <module>()
----> 1 import hello_ext
ImportError: ./hello_ext.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
您应该在 link 命令中包含一些库,
g++ -shared -Wl,--no-undefined hello_ext.o -lboost_python -lpython2.7 -o hello_ext.so
使用 -Wl,--no-undefined
linker 选项,如果缺少某些符号,将会出错。
我有兴趣使用 Boost.Python 从我的 Python 调用 C++ 函数 脚本。
这个例子 here 是 Boost python 主页上的一个介绍性例子,我无法 运行。有人可以帮我解决这个问题吗?
这是我试过的
我创建了一个名为 hello_ext.cpp 的文件,如下所示
#include <boost/python.hpp>
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
然后我编译成共享库如下
g++ -c -Wall -Werror -fpic hello_ext.cpp -I/usr/include/python2.7
g++ -shared -o libhello_ext.so hello_ext.o
我尝试 import hello_ext
的 ipython 解释器终于启动了
但收到以下错误消息。我哪里错了?
In [1]: import hello_ext
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-18c4d6548768> in <module>()
----> 1 import hello_ext
ImportError: ./hello_ext.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
您应该在 link 命令中包含一些库,
g++ -shared -Wl,--no-undefined hello_ext.o -lboost_python -lpython2.7 -o hello_ext.so
使用 -Wl,--no-undefined
linker 选项,如果缺少某些符号,将会出错。