我通过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存在于工作目录中。
有关在何处找到遗失符号的任何建议?
答案 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 在内的问题