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
相关产品推荐
相关产品推荐

