我想就以下问题寻求帮助。
一些理论:我使用的是Ubuntu 12.04,python2.7,我正在尝试在python中加载C共享库(libFSToolbox.so)。我想使用PyFeat作为FEAST的python包装器。我编译了FEAST和FEAST先决条件MIToolbox。有问题的libFSToolbox.so是编译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&#34; CXXFLAGS = -O3 -fPIC -m64&#34;)并且我的python解释器也是64(尝试:python&gt;&gt;平台。 machine()回答:&#39; x86_64&#39;)
感谢您的时间
答案 0 :(得分:0)
我认为问题是如何在FEAST的Makefile中给出链接器的选项。
有两个选项
1)在Makefile中更改FEAST的行
这 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