在 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 [重复]

在python中加载.db文件时出现“没有这样的表”错误

在Python中加载DLL时出现Windows错误1114

在托管 DLL 中加载 C++ DLL 时出现 EEFileLoadException

从包中加载 NIB 时出现异常