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

Expo SDK 54 EAS构建中Hermes ABI不匹配问题

Expo SDK 54 + React Native 0.81.5 iOS EAS构建链接错误排查与疑问

环境信息

  • Expo SDK: 54.0.34
  • React Native: 0.81.5
  • expo-router: ~6.0.23
  • react-native-reanimated: ~4.1.1
  • EAS构建镜像: macos-sequoia-15.3-xcode-16.2(也曾尝试macos-sequoia-15.5-xcode-26.0)
  • iOS部署目标: 15.1
  • 新架构: 已启用
  • Hermes: 已启用

错误信息

Undefined symbols for architecture arm64:
  "vtable for hermes::vm::NopCrashManager", referenced from:
      hermes::vm::RuntimeConfig::RuntimeConfig() in libExpoModulesCore.a[7](EXJavaScriptRuntime.o)
   NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.

  "typeinfo for facebook::jsi::HostObject", referenced from:
      typeinfo for expo::ExpoModulesHostObject in libExpoModulesCore.a[26](ExpoModulesHostObject.o)
      typeinfo for expo::LazyObject in libExpoModulesCore.a[42](LazyObject.o)
      typeinfo for facebook::react::TurboModule in libRNReanimated.a[49](ReanimatedModuleProxy.o)
      typeinfo for RNScreens::RNScreensTurboModule in libRNScreens.a[24](RNScreensTurboModule.o)
      typeinfo for worklets::JSIWorkletsModuleProxy in libRNWorklets.a[12](JSIWorkletsModuleProxy.o)

  "typeinfo for facebook::jsi::NativeState", referenced from:
      typeinfo for expo::EventEmitter::NativeState in libExpoModulesCore.a[3](EventEmitter.o)

  "typeinfo for facebook::jsi::JSIException", referenced from:
      GCC_except_table32 in libExpoModulesCore.a[7](EXJavaScriptRuntime.o)

  "typeinfo for facebook::jsi::JSINativeException", referenced from:
      ... in libRNReanimated.a, libRNWorklets.a

ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1

问题分析

符号名称中的[abi:ne180100]显示,libExpoModulesCore.a和libRNReanimated.a是基于特定C++ ABI标签的头文件编译的,但EAS引入的预构建React Native框架(React-Core-prebuilt、ReactNativeDependencies)导出的ABI版本不匹配。具体来说,NopCrashManager、HostObject、NativeState、JSIException、JSINativeException和Buffer存在于预构建的Hermes/JSI二进制文件中,却无法被本地编译的.a文件链接。

已尝试的解决方法

  • 开启/关闭新架构(newArchEnabled)——错误未解决
  • 切换EAS构建镜像至xcode-16.2和xcode-26.0
  • 在expo-build-properties插件中设置buildReactNativeFromSource: true,强制从源码编译RN——仍出现相同链接错误
  • 卸载并重新安装react-native-reanimated——错误仍存在
  • 删除已提交的整个ios/文件夹,让EAS每次构建时执行干净的expo prebuild——错误依旧
  • 通过Podfile的post_install钩子注入多种OTHER_CPLUSPLUSFLAGS,包括-DFOLLY_CFG_NO_COROUTINES=1(已正确处理字符串和数组类型的构建设置)

核心疑问

是否有已知方法可强制预构建的React-Core-prebuilt和ReactNativeDependencies xcframeworks与Expo SDK 54/RN 0.81.5中本地编译的原生模块对齐ABI?或者这是已确认的兼容性问题,需要回退到Expo SDK 53/RN 0.79,直到Expo发布匹配的预构建包?

若近期有使用Expo SDK 54(尤其是搭配react-native-reanimated 4.x和新架构)成功发布iOS生产构建的开发者,欢迎分享相关经验。

内容的提问来源于stack exchange,提问作者Zaiden Von Stoll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 01:34:53