M1芯片Mac编译PyO3项目出现arm64架构符号找不到链接错误
M1芯片Mac上PyO3 arm64架构编译报错解决方案
该问题是ARM架构Mac上使用旧版本PyO3的常见编译错误,可通过以下方案解决:
- 升级PyO3版本
你当前使用的0.14.5版本发布于2021年,对Apple Silicon原生arm64架构适配不完善,存在Python架构识别错误、链接符号不匹配的已知问题。建议将Cargo.toml中的PyO3依赖版本升级至0.16及以上稳定版,保留extension-module特性即可。 - 确认Python架构并指定编译用Python路径
先执行命令python3 -c "import platform; print(platform.machine())",确认输出为arm64,排除当前使用的Python实际为Rosetta转译的x86_64版本的问题。编译时可手动指定PYO3_PYTHON环境变量指向对应arm64版本Python的二进制路径,示例如下:PYO3_PYTHON=/opt/homebrew/bin/python3.8 cargo build - 新增macOS链接器配置
在项目根目录新建.cargo/config.toml文件,添加如下配置,让链接器动态查找Python符号,避免编译阶段强制绑定导致的符号找不到问题:
[target.aarch64-apple-darwin] rustflags = [ "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup", ]
内容的提问来源于stack exchange,提问作者Pat
相关产品推荐
相关产品推荐

