确定用于cdll.LoadLibrary的库名的系统级方法

时间:2012-07-16 18:41:41

标签: python linux ctypes loadlibrary

根据文件,

  

在Linux上,需要指定文件名,包括   扩展加载库,因此不能使用属性访问   加载库。 dll加载器的LoadLibrary()方法   应该使用,或者您应该通过创建实例来加载库   通过调用构造函数来调用CDLL:

我正在使用一组外部开发的python脚本。他们需要一个而不是标准库(liblzma)并使用LoadLibrary中的ctypes来加载它 - 通过路径名。我的问题是这些脚本需要在几个不同的Linux安装上运行,并且可能在未来更多。 liblzma共享库的完整文件名及其位置因系统而异。我已经针对各种lib版本进行了测试,发现没有冲突。

我真正需要的是是一种确定已安装的库的基本名称的方法,以便将适当的名称传递给LoadLibrary

我考虑过只使用ldconfig -p打印现有的lib并解析输出以查找lib名称。还有其他想法吗?

我确实在这里有点偏离我的元素。有问题的脚本只是大型项目的必需部分。

1 个答案:

答案 0 :(得分:2)

只要库位于加载程序搜索路径中,您就可以通过相对名称指定它。

$ ls /usr/lib64/libXt.*
/usr/lib64/libXt.so.6.0.0

>>> ctypes.CDLL('libXt.so.6.0.0')
<CDLL 'libXt.so.6.0.0', handle 26b72b0 at 2723c90>