You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 规范签名+调整压缩参数

已签名的二进制直接压缩会破坏签名结构,需按以下流程操作:

  1. 移除原有签名:
    codesign --remove-signature your-executable
    
  2. 使用低压缩级别或禁用LZMA算法,减少对二进制结构的修改:
    # 最快压缩级别,降低结构损坏风险
    upx -1 your-executable
    # 或禁用LZMA压缩
    upx --no-lzma your-executable
    
  3. 重新签名,若遇到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:53:13