我有一个用C编写的库,需要从Python访问,所以我使用Boost.Python. 我可以将我的库编译成Boost.so文件,但当我尝试将其加载到Python中时(使用import tropmodboost),我得到以下错误:ImportError: ./tropmodboost.so: undefined symbol: _Z12simplex_freeP7simplex
我found指出这是一个common错误,通常可以通过在我的g++链接器调用中对-l指令进行重新排序来修复,但据我所知,我已经可以确定了。在
以下是我在Ubuntu上运行的Makefile的文本:
^{pr2}$
调用ldd tropmodboost.so输出:linux-vdso.so.1 => (0x00007ffff79a3000)
libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f34ea732000)
libboost_python-py27.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0 (0x00007f34ea4e6000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f34ea163000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f34e9f4d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f34e9b84000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f34e9966000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f34e974c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f34e9548000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f34e9344000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f34e903b000)
/lib64/ld-linux-x86-64.so.2 (0x0000561fcfee3000)
下面是一个来自.hpp文件的except显示了Boost包装器代码本身:#include
#include
#include
#include
#include
[...]
BOOST_PYTHON_MODULE(tropmodboost) {
using namespace boost::python;
class_("ConfigSpace", init())
.def("destroy", &ConfigSpace::destroy)
.def("getTraceOfPerm", &ConfigSpace::getTraceOfPerm)
;
}