夜雨聆风学习资料网

ARTICLE · 1152362

Unity iOS 出包 libGameAssembly 超上限

Unity iOS 出包 libGameAssembly 超上限

ld: b(l) ARM64 branch out of range。iOS 出包直接卡在链接期,ipa 都拿不到。

查了才发现,libGameAssembly.a 的 __text 段涨到了约 130MB。ARM64 直接分支上限是 ±128MB,超了 2.6MB,链接器放不下跳板就崩了。

报错里那个 ___clang_call_terminate,是 clang 生成的异常辅助函数。它被合并成一份放在段首,离所有人最远,所以超限时第一个暴露。这纯粹是单段内的距离问题,跟异常逻辑没关系。

网上主流说法是靠重排 section 来修,但本工程压根没做 section 分离,那套方案根本使不上劲。最后靠改一个 Unity 配置搞定:把 iOS 的 IL2CPP Code Generation 从 Faster runtime 改成 Faster (smaller) builds。

这招开了全泛型共享,值类型也共用一份代码,C++ 体积一下就压回去了。代价是泛型小方法没法内联,可能掉点性能,但正确性没问题。先让包出出来,真机跑一段战斗测过帧时间再说。

原文Unity iOS 出包 libGameAssembly 超 ARM64 分支寻址上限(±128MB)排查与修复
江苏,9分钟前,

相关学习资料