ctypes 引用

搜索共享lib,dll

当在编译后的语言中进行编码,共享库在编译链接一个程序的时候都是可用的,在运行时也是可用的。

find_library函数的目的就是进行定位库,这个方式和编译器或者说运行时的加载器相似(在不同平台可能有不同的动态库,应该加载最新的)ctypes加载器的行为就像是程序在运行的时候调用自己的加载器一样。

ctypes.util模块提供了怎样选择库的方法。

ctypes.util.findlibaray(name)。寻找并返回路径名。name是没有后缀类似lib,dll之类的。那些.so,.dylib活着其他类型的都是在posix编译的时候添加的 -l选项。如果没有lib发现,返回None。

具体实现根据系统而定。

在linux,find_library会尝试去运行其他的程序(/sbin/ldconfig,gcc,objdum,ld)来寻找库文件,它返回链接库的文件名。

在linux python3.6以后的版本,如果前面的方法找不到就在环境变量 LD_LIBRARY_PATH 中找。

>>> from ctypes.util import find_library
>>> find_library("m")
'libm.so.6'
>>> find_library("c")
'libc.so.6'
>>> find_library("bz2")
'libbz2.so.1.0'
>>>

os x中返回绝对路径或None

>>> from ctypes.util import find_library
>>> find_library("c")
'/usr/lib/libc.dylib'
>>> find_library("m")
'/usr/lib/libm.dylib'
>>> find_library("bz2")
'/usr/lib/libbz2.dylib'
>>> find_library("AGL")
'/System/Library/Frameworks/AGL.framework/AGL'
>>>

windows,就是系统的环境变量,返回绝对录几个。如果没有找到就返回None。

如果通过ctypes包装一个库文件,也许更加好决定文件名,在运行的时候硬编码比find_library更好。

猜你喜欢

转载自blog.csdn.net/rubikchen/article/details/89644793
今日推荐