MacOS Big Sur语言 - Python ctypes find_library找不到库(ssl,CoreFound



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

相关内容

最新更新