MacOS Big Sur在Dev Beta中推出,我正在运行它以测试一些东西。我注意到的一件事是,在Python ctypes中,find_library()
不再找到库。
一个例子是
from ctypes.util import find_library
find_library("ssl")
这应该找到类似于输出的ssl
文件,例如
>>> find_library("ssl")
'libssl.so.1.1'
然而,在大苏尔,它一无所获。我注意到有一些动态链接器更改。这可能会导致此行为。
还有其他人遇到过这种情况吗?我正在寻找在大苏尔系统中查找库的新方法。
我相信它与iOS相同,因为它使用/System/Library/dyld/dyld_shared_cache_x86_64
进行共享缓存。但是我不够熟悉,不知道如何打开该文件以访问CoreFoundations,ssl等内容。还在研究它。
这个问题是由于python使用stat()
在dlopen之前检查磁盘上的dylibs。 此行为在 macOS Big Sur 中停止工作,因为当 dylibs 包含在 dyld 共享缓存中时,它们会从磁盘中删除。
macOS中包含的python对此进行了修复。
/usr/bin/python3
from ctypes.util import find_library
>>> find_library("ssl")
'libssl.so.1.1'
此外,这里有一个指向开源 python 拉取请求的链接,用于那里的相同修复。 https://github.com/python/cpython/pull/21241
我最终使用静态路径来实现我的目的。
你通常应该认为从Python 3.9.0,3.8.6,3.7.9开始 不支持 MacOS 11 或 Apple Silicon。在此处跟踪进度: https://bugs.python.org/issue41100