使用 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 选项,如果缺少某些符号,将会出错。