upgrade-support
upgrade-support copied to clipboard
RN Upgrade from 0.74.2 to 0.77.2 when running android assemblyDebug linker errors
Environment
info Fetching system and libraries information... System: OS: macOS 15.4.1 CPU: (12) arm64 Apple M2 Pro Memory: 120.38 MB / 32.00 GB Shell: version: "5.9" path: /bin/zsh Binaries: Node: version: 22.15.0 path: ~/.nvm/versions/node/v22.15.0/bin/node Yarn: version: 1.22.22 path: ~/projects/ioverlander-client-react/node_modules/.bin/yarn npm: version: 10.9.2 path: ~/.nvm/versions/node/v22.15.0/bin/npm Watchman: version: 20230430.125247.0 path: /usr/local/bin/watchman Managers: CocoaPods: version: 1.16.2 path: /usr/local/bin/pod SDKs: iOS SDK: Platforms: - DriverKit 24.4 - iOS 18.4 - macOS 15.4 - tvOS 18.4 - visionOS 2.4 - watchOS 11.4 Android SDK: API Levels: - "29" - "30" - "31" - "33" - "34" - "35" Build Tools: - 29.0.3 - 30.0.2 - 30.0.3 - 32.0.0 - 33.0.1 - 33.0.2 - 34.0.0 - 35.0.0 System Images: - android-34 | Google APIs ARM 64 v8a - android-35 | Google APIs ARM 64 v8a - android-35 | Google Play ARM 64 v8a Android NDK: Not Found IDEs: Android Studio: 2022.3 AI-223.8836.35.2231.10671973 Xcode: version: 16.3/16E140 path: /usr/bin/xcodebuild Languages: Java: version: 17.0.8 path: /usr/bin/javac Ruby: version: 2.6.10 path: /usr/bin/ruby npmPackages: "@react-native-community/cli": installed: 18.0.0 wanted: ^18.0.0 react: installed: 18.3.1 wanted: 18.3.1 react-native: installed: 0.77.2 wanted: ~0.77.2 react-native-macos: Not Found npmGlobalPackages: "react-native": Not Found Android: hermesEnabled: true newArchEnabled: true iOS: hermesEnabled: true newArchEnabled: false
Things I’ve done to figure out my issue
- [X] I used upgrade-helper to do my upgrade.
- spent lots of time googling and searching
- asked advice of other devs
Upgrading version
0.77.2
Description
I've upgraded to 0.77.2 and ios is building and linking properly. Android release is also working. However, when running:
$ ./gradlew assembleDebug
I receive lots of errors by the linker, all looking like this:
> Task :app:buildCMakeDebug[arm64-v8a]
C/C++: ninja: Entering directory `/Users/xxj/projects/my-react-project/android/app/.cxx/Debug/606m5u29/arm64-v8a'
C/C++: : && /Users/xxj/Library/Android/sdk/ndk/27.1.12297006/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=aarch64-none-linux-android24 --sysroot=/Users/xxj/Library/Android/sdk/ndk/27.1.12297006/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D__BIONIC_NO_PAGE_SIZE_MACRO -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fno-limit-debug-info -Wl,-z,max-page-size=16384 -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libreact_codegen_safeareacontext.so -o /Users/xxj/projects/my-react-project/android/app/build/intermediates/cxx/Debug/606m5u29/obj/arm64-v8a/libreact_codegen_safeareacontext.so safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewShadowNode.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewState.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/ComponentDescriptors.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/EventEmitters.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/ShadowNodes.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/States.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/safeareacontextJSI-generated.cpp.o safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/safeareacontext-generated.cpp.o /Users/xxj/.gradle/caches/8.10.2/transforms/5deb82addbf8b31de14123bfcc46b5b0/transformed/fbjni-0.7.0/prefab/modules/fbjni/libs/android.arm64-v8a/libfbjni.so /Users/xxj/.gradle/caches/8.10.2/transforms/de3d83211ade7b6301fee17e14e72358/transformed/react-android-0.77.2-release/prefab/modules/jsi/libs/android.arm64-v8a/libjsi.so /Users/xxj/.gradle/caches/8.10.2/transforms/de3d83211ade7b6301fee17e14e72358/transformed/react-android-0.77.2-release/prefab/modules/reactnative/libs/android.arm64-v8a/libreactnative.so -latomic -lm && :
C/C++: ld.lld: error: undefined symbol: facebook::react::Sealable::Sealable()
C/C++: >>> referenced by Props.cpp:17 (/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp:17)
C/C++: >>> safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp.o:(facebook::react::RNCSafeAreaProviderProps::RNCSafeAreaProviderProps(facebook::react::PropsParserContext const&, facebook::react::RNCSafeAreaProviderProps const&, facebook::react::RawProps const&))
C/C++: >>> referenced by Props.cpp:24 (/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp:24)
C/C++: >>> safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp.o:(facebook::react::RNCSafeAreaViewProps::RNCSafeAreaViewProps(facebook::react::PropsParserContext const&, facebook::react::RNCSafeAreaViewProps const&, facebook::react::RawProps const&))
C/C++: >>> referenced by Props.h:20 (/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/src/main/jni/../../../build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.h:20)
C/C++: >>> safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/ComponentDescriptors.cpp.o:(facebook::react::RNCSafeAreaProviderProps::RNCSafeAreaProviderProps())
C/C++: ld.lld: error: undefined symbol: facebook::react::Sealable::~Sealable()
C/C++: >>> referenced by Props.cpp:23 (/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp:23)
C/C++: >>> safeareacontext_autolinked_build/CMakeFiles/react_codegen_safeareacontext.dir/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp.o:(facebook::react::RNCSafeAreaProviderProps::RNCSafeAreaProviderProps(facebook::react::PropsParserContext const&, facebook::react::RNCSafeAreaProviderProps const&, facebook::react::RawProps const&))
C/C++: >>> referenced by Props.cpp:31 (/Users/xxj/projects/my-react-project/node_modules/react-native-safe-area-context/android/build/generated/source/codegen/jni/react/renderer/components/safeareacontext/Props.cpp:31)
Reproducible demo
I have not pared this down to make a reproducible project I can share.
I'm a noob when it comes to android, but what it looks like is that it's building and linking debug versions of some libraries against release versions of other libraries.
For example, when I open up node_modules/react-native/ReactCommon/react/renderer/core/Sealable.cpp, I see this:
#ifdef REACT_NATIVE_DEBUG
Sealable::Sealable() : sealed_(false) {}
Sealable::Sealable(const Sealable & /*other*/) : sealed_(false){};
This makes me think that REACT_NATIVE_DEBUG was not defined when building the react native core code above, but that it was expected to be defined causing the mismatch.
I'm not sure how REACT_NATIVE_DEBUG or why it might not be defined properly in my android builds.
Much appreciation for any ideas/suggestions here.
thanks, sam
We are also seeing this same issue with android and safeareacontext specifically. Reverting back to react native old arch fixes this issue but we'd rather not convert our apps back to old arch.
What version of react-native-safe-area-context are you using? When using new architecture you might need to use a specific version since it currently isn’t always backwards compatible.
we're on react-native-safe-area-context 5.4.0, but also our RN version is actually 0.79 (not trying to hijack this issue if you want to keep it scoped to the specific 0.77.2 version)