繁体   English   中英

Python 在 Mac M1 上运行 C++ 扩展崩溃 ARM

[英]Python Running C++ Extension Crashes On Mac M1 ARM

最近从 Mac Intel 转移到 M1 处理器,并且无法在任何地方找到任何东西来帮助解决我在使用 C++ 扩展的 Python 程序之一时遇到的问题。

我使用 distutils 将 C++ 代码编译成 darwin.so 二进制文件。 第一次设置环境并编译二进制文件时,我没有任何问题。 但是,在对 C++ 代码进行更改并编译新的二进制文件后,执行相应的 Python 代码会崩溃,几乎没有关于原因的信息。 在控制台中,我有时会看到显示“代码签名无效”的报告。 在终端中,它只是说“zsh:杀死 python xxxxxx.py”。 我的项目是使用 Conda Miniforge 在虚拟环境中设置的。

如果我重新启动 Mac 并再次运行 Python,则不会发生此类崩溃,并且我在之前的编译中所做的 C++ 代码更改是有效的。 如果我对 C++ 代码进行后续更改,它会再次崩溃,直到重新启动。

找到解决方案后,我发布了上述问题,以防其他人偶然遇到同样的事情。

经过各种测试,我确定我的问题是我的 distutils 设置脚本正在使用 shutil.copy 将新编译的二进制文件移动到 Python 代码正在寻找的不同位置。 我不知道为什么,但我发现如果安装脚本在复制新二进制文件之前首先使用 os.remove 删除旧二进制文件,问题就消失了。 我的猜测是 darwin.so 文件上的代码签名在被副本替换时保留了一些旧信息。

我不知道这是否真的与 M1 处理器有关,或者实际上与操作系统(Monterey)有关。 我以前没有此问题的 Intel Mac 正在运行 Catalina。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM