Python加载C共享库时的OSError(未定义符号:checkedCalloc)

1 投票
1 回答
869 浏览
提问于 2025-04-18 00:41

我想请教一下关于以下问题的帮助。

一些背景知识:我正在使用Ubuntu 12.04,python2.7,并且我想在python中加载一个C语言共享库(libFSToolbox.so)。我想使用PyFeat,这是一个用于FEAST的python封装。我已经编译了FEAST和它的前置库MIToolbox。而这个有问题的libFSToolbox.so是FEAST编译的结果。

...然后现实是:构建和其他一切都进行得很顺利,但当我尝试使用feast时,在导入时出现了问题。

File "test.py", line 2, in <module>
from feast import *
File "/usr/local/lib/python2.7/dist-packages/feast.py", line 25, in <module>
libFSToolbox = c.CDLL("/home/peterd/VUT/ML/FEAST-master/libFSToolbox.so"); 
File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /home/peterd/VUT/ML/FEAST-master/libFSToolbox.so: undefined symbol:     
checkedCalloc

我已经将C库编译为x64(使用命令$(MAKE) libFSToolbox.so "CXXFLAGS = -O3 -fPIC -m64"),而我的python解释器也是64位的(我试过:python>> platform.machine(),返回结果是'x86_64')。

感谢你的时间。

1 个回答

0

我觉得问题出在FEAST的Makefile里,链接器的选项设置不太对。

有两个解决办法:

1) 修改FEAST的Makefile中的一行

LINKER = gcc

改成

LINKER = ld

2) 如果你想用gcc来链接的话,

需要把Makefile的第47行

$(LINKER) -lMIToolbox -lm -L$(MITOOLBOXPATH) -shared -o libFSToolbox.so $(objects)

改成

$(LINKER) -L$(MITOOLBOXPATH) -shared -o libFSToolbox.so $(objects) -lMIToolbox -lm

撰写回答