Mac(Intel/ARM64)下UPX打包二进制文件损坏问题求助
macOS下UPX打包二进制损坏的解决方案及兼容性说明
UPX官方支持macOS的Intel(x86_64)和Apple Silicon(arm64)架构,也兼容通用二进制,但部分版本对macOS代码签名、Mach-O格式的细节处理存在bug,这是你遇到报错的核心原因。
解决方案
1. 构建UPX开发分支代码
master分支可能存在未修复的Mach-O相关问题,dev分支通常包含最新的兼容性修复:
git clone https://github.com/upx/upx.git cd upx git checkout dev mkdir build && cd build cmake .. make # 使用编译后的UPX处理二进制 ./src/upx your-executable
2. 规范签名+调整压缩参数
已签名的二进制直接压缩会破坏签名结构,需按以下流程操作:
- 移除原有签名:
codesign --remove-signature your-executable - 使用低压缩级别或禁用LZMA算法,减少对二进制结构的修改:
# 最快压缩级别,降低结构损坏风险 upx -1 your-executable # 或禁用LZMA压缩 upx --no-lzma your-executable - 重新签名,若遇到
main executable failed strict validation错误,添加--options=runtime参数:codesign -s "你的开发者ID" --options=runtime your-executable
3. 拆分通用二进制后单独处理
针对通用二进制出现的offset to architecture arm64 extends past end of file错误,拆分架构分别压缩再合并:
# 拆分x86_64和arm64架构 lipo your-executable -extract x86_64 -output exec-x86 lipo your-executable -extract arm64 -output exec-arm # 分别压缩 upx exec-x86 exec-arm # 合并为通用二进制 lipo -create exec-x86 exec-arm -output exec-upx # 重新签名 codesign -s "你的开发者ID" exec-upx
4. 降级到UPX稳定旧版本
新版本UPX可能引入兼容性问题,尝试降级到4.0.2版本:
- 通过Homebrew安装(若仓库提供旧版本):
brew install upx@4.0.2 - 或直接下载官方预编译的4.0.2版本使用。
内容的提问来源于stack exchange,提问作者Vinu W
相关产品推荐
相关产品推荐

