在 Python 中加载 C 共享库时出现 OSError(未定义符号:checkedCalloc)
Posted
技术标签:
【中文标题】在 Python 中加载 C 共享库时出现 OSError(未定义符号:checkedCalloc)【英文标题】:OSError during loading of C shared library in Python (undefined symbol:checkedCalloc) 【发布时间】:2014-03-31 15:36:43 【问题描述】:我想就以下问题寻求一些帮助。
一些理论:我正在使用 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 "CXXFLAGS = -O3 -fPIC -m64") 并且我的 python 解释器也是 64(尝试过:python>> platform.machine() 答案:' x86_64')
感谢您的宝贵时间
【问题讨论】:
【参考方案1】:我认为问题在于如何在 FEAST 的 Makefile 中给出链接器的选项。
两个选项是
1) 将 Makefile 中的行更改为 FEAST
来自 链接器 = gcc
到
链接器 = 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
【讨论】:
以上是关于在 Python 中加载 C 共享库时出现 OSError(未定义符号:checkedCalloc)的主要内容,如果未能解决你的问题,请参考以下文章
使用库 github.barteksc.pdfviewer 在我的应用程序中加载 PDF 时出现错误
当我在 python 中加载数据帧时出现 UnicodeDecodeError [重复]