1

extractor在 python 2.7 中通过pip install extractor. 我在 OS X 上使用自制软件,我之前运行过homebrew install libextractor. 这会在 /usr/local/lib 中创建扩展名为 .a 和 .dylib 的文件。(GNU 解压器)

在 extractor.py 的第 36 行附近,有以下代码:

尝试:
   #加载共享对象文件
   libextractor = cdll.LoadLibrary('libextractor.so.3')
除了 OSError:
   libextractor = cdll.extractor

我正在OSError: dlopen(extractor, 6): image not found尝试import extractor从 python shell 中获取。

这似乎是因为我没有 .so.3 文件,并且在模块中进行了硬编码。但是错误来自 except 块,而不是 try 块。

这个错误是由于 libextractor.so.3 的硬编码造成的吗?如果是这样,我如何告诉 python 加载正确的库?我尝试用确实存在的各种文件(.a、.dylib)替换该值,但没有成功。

4

2 回答 2

2

如果它有效,您应该使用 ctype.CDLL("libextractor") 并让 ctypes 找出正确的扩展名。遗憾的是,不存在特定于操作系统的扩展魔法。

ctypes提供find_library方法,如果可行,请使用它。可悲的是,它依赖于外部程序,这意味着在小型或奇怪的系统上运行时会受到影响和损坏。

其他项目继续进行并基于 os.uname() 进行硬编码扩展。如果你必须这样做。

PS except 子句是一些奇怪的解决方法,实际上ctypes.cdll.foo相当于ctypes.cdll.__getattr__("foo")which is the same as ctypes.CDLL("foo")which doesn't work without lib-or extension。

于 2014-03-18T17:01:06.900 回答
0

您是否尝试过按照以下说明进行操作:

http://www.gnu.org/software/libextractor/manual/html_node/Preparation.html

于 2014-03-18T16:50:46.433 回答