使用时出错ctypes.CDLLpython中的共享库

2024-09-24 02:14:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个更大程序的共享库文件。我似乎在所有共享库中都会遇到很多这样的错误,所以我想我已经把我的问题缩小到与此相关的问题。在

我有一个文件叫做libMdsdcl.so. 出于测试目的,我将它单独放在一个文件夹中,并运行以下行来重复错误:

In [1]: import ctypes as c
In [2]: from ctypes.util import find_library
In [3]: name = 'Mdsdcl'
In [4]: libname = find_library(name)
In [5]: c.CDLL(libname)
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-6-7c40f200b197> in <module>()
----> 1 c.CDLL(libname)

/usr/lib/python3.6/ctypes/__init__.py in __init__(self, name, mode, handle, use_errno, use_last_error)
    346 
    347         if handle is None:
--> 348             self._handle = _dlopen(self._name, mode)
    349         else:
    350             self._handle = handle

OSError: libreadline.so.6: cannot open shared object file: No such file or directory

这不是我的代码,而是代码的一部分,似乎对每个安装它的人都有效。基于其他类似的问题,我检查了python安装的架构和文件,它们都是64位的。我的libreadline有什么问题吗?事实上,在此之前我也刚刚升级到ubuntu18.04。在

作为参考,这是MDSplus在微小的,微小的机会,有人看到它熟悉它。在


Tags: 文件nameinimportself错误libraryfind
1条回答
网友
1楼 · 发布于 2024-09-24 02:14:50

您没有显示如何在中填充name

libname = c.CDLL(name)

您可能需要确保从正确的目录开始。os.path.dirname(__file__)将为您提供正确的目录。在

但在这种情况下,我通常会看到:

^{pr2}$

我认为问题在于你的路径,因为你没有给出共享对象的实际扩展。尝试:

name = "libMdsdcl.so"  # or whatever it is called

只是一些想法,因为我不能确定基于有限的信息显示。在

相关问题 更多 >