M1 Mac Ventura下首次编译正常的arm64命令行程序后续签名验证失败
解决Ventura 13.4上本地编译arm64二进制签名无效的问题
问题原因
Ventura 13.x的安全机制相比Monterey 12.x对本地编译的二进制文件有更严格的代码签名校验逻辑,即使从未手动签名的二进制,在修改重建后也可能触发系统的Gatekeeper或代码签名缓存验证,导致被标记为无效签名而终止运行。
解决步骤
检查并移除文件隔离属性
先查看目标文件是否带有隔离标记:xattr -l /opt/local/src/RTcmix.git/bin/CMIX如果输出中包含
com.apple.quarantine,执行以下命令移除:xattr -d com.apple.quarantine /opt/local/src/RTcmix.git/bin/CMIX同时对依赖的私有dylib执行相同操作。
手动添加临时Ad-Hoc签名
Ventura允许本地编译的二进制使用自签名的Ad-Hoc签名绕过校验,执行以下命令对主程序和依赖库签名:codesign -s - --deep --force /opt/local/src/RTcmix.git/bin/CMIX codesign -s - --deep --force /path/to/your/private/dylib替换
/path/to/your/private/dylib为实际的私有库路径。清除系统代码签名缓存
系统可能缓存了旧的签名验证结果,清除缓存后重启系统:sudo rm -rf /var/db/cachefilesd sudo reboot检查Makefile编译参数
确认Makefile中没有添加与代码签名冲突的链接参数,比如错误的段对齐标记或签名相关flag,确保编译链接流程与首次成功构建一致。临时关闭Gatekeeper排查(不建议长期使用)
如果以上方法无效,可临时关闭Gatekeeper验证是否是安全策略拦截:sudo spctl --master-disable测试完成后重新开启:
sudo spctl --master-enable
内容的提问来源于stack exchange,提问作者nethack
相关产品推荐
相关产品推荐

