从BoostPython暴露C ++到Python错误

时间:2014-04-18 14:08:07

标签: python c++ boost

我通过BoostPython库向Python公开了一个简单的C ++代码:

#include <boost/python/detail/wrap_python.hpp>
#include <boost/python.hpp>

using namespace boost::python;

bool test_api( void ){
   return true;
};

BOOST_PYTHON_MODULE(materials) {

   def( "test_api", test_api );

}

尝试导入此模块后,python解释器返回错误:

ImportError: ./example.so: undefined symbol: _Py_RefTotal

我已经将模块静态链接到boost python库,并且python动态库libpython3.2m.so和libpython3.2m.so.1.0存在于工作目录中。

有关在何处找到遗失符号的任何建议?

2 个答案:

答案 0 :(得分:0)

Boost库与Python安装不一致。

cd boost_source
./bootstrap.sh --with-libraries=python --prefix=../boost_target

将Boost配置为指向正确的Python安装:

vim tools/build/v2/user-config.jam

编辑指向Python的行:

using python : version_number
             : path_to_python_executable 
             : path_to_python_include_directory 
             : path_to_python_library_directory

然后,运行构建系统:

./b2

答案 1 :(得分:0)

_Py_RefTotal 在 object.h 中定义在预编译器保护下:

$less include/python3.6m/object.h
#ifdef Py_REF_DEBUG
PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
...
...
#endif /* Py_REF_DEBUG */

我正在链接 python3.6m,但包含来自 include/python3.6dm 的标题。修复了包括 ptyhon3.6m 在内的问题