zkgroup iOS通用归档失败arm64架构LLVM版本不匹配问题求助
问题诱因
该错误由LLVM版本标识不兼容导致:
- 你使用的Rust 1.57-nightly工具链内置上游开源版LLVM 13.0.0,编译生成的arm64架构目标文件标注的Producer为
LLVM13.0.0-rust-1.57.0-nightly - Xcode通用归档时调用苹果定制版LLVM对应的链接器,仅识别苹果自研分支的LLVM标识
LLVM APPLE_1_1300.0.29.3_0,对Rust自带的上游LLVM标识校验不通过 - 单设备调试运行正常是因为调试模式下链接器不会执行严格的bitcode/版本标识校验,仅全量通用归档阶段会触发该校验逻辑
解决方法
- 方案1:调整Rust工具链版本(最稳定)
可二选一:- 降级nightly工具链到
nightly-2021-09-08及更早版本,该版本对苹果平台的LLVM标识做了特殊兼容处理 - 升级Rust到1.58及以上的stable正式版本,后续版本已完全修复苹果架构的LLVM标识适配问题
- 降级nightly工具链到
- 方案2:关闭Xcode bitcode校验
如果你的项目不需要支持App Store bitcode,直接在Xcode构建设置中将Enable Bitcode选项设置为NO,归档时会跳过LLVM版本标识校验,直接完成链接 - 方案3:修改编译参数临时适配
若必须使用当前工具链且需要保留bitcode,可在项目的.cargo/config.toml中添加如下配置,强制Rust输出兼容苹果的LLVM标识:[target.aarch64-apple-ios] rustflags = [ "-C", "llvm-args=-object-emission-default-producer=LLVM APPLE_1_1300.0.29.3_0" ]
内容的提问来源于stack exchange,提问作者tanmoy
相关产品推荐
相关产品推荐

