对于一个项目,我正在读取一个包含ctypes.CDLL
和ctypes.cdll.LoadLibrary(...)
的.so
文件,这是在devcontainer中完成的。docker图像基于以下内容:
FROM --platform=linux/amd64 mcr.microsoft.com/vscode/devcontainers/python:3.10
。
请注意linux/amd64
平台。使用uname
检查系统信息时,显示x86_64体系结构:Linux ceb596f614b7 5.10.124-linuxkit #1 SMP PREEMPT Thu Jun 30 08:18:26 UTC 2022 x86_64 GNU/Linux
。这运行良好,并且加载库时没有任何错误。
然而,我有一台M1 Mac,我在上面安装了Rosett和Python(https://stackoverflow.com/a/71873666/2989034)。当我检查系统信息时,我得到了以下内容,也是x86_64体系结构。
Darwin MacBook-van-Bas.local 21.6.0 Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000 x86_64
当我在罗塞塔终端中加载文件时,我会得到以下错误:
OSError:dlopen(/Users/bas/lib.so,0x0006(:已尝试:'/Users/base/lib.so'(不是mach-o文件(
这怎么可能?它是相同的x86_64体系结构。我唯一的选择是在devcontainer中工作吗?
我最终找到了源代码并重新构建为Mach-o文件。但要回答我的问题:苹果平台在架构和平台之间有着重要的区别。