Skip to content

RN Upgrade from 0.74.2 to 0.77.2 when running android assemblyDebug linker errors #332

@sjchristi

Description

@sjchristi

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

  • 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions