Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash since 11.0.0-beta.2+: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__emutls_get_address" #2271

Closed
felixkrautschuk opened this issue Feb 1, 2024 · 2 comments
Labels
bug 🪲 Something isn't working

Comments

@felixkrautschuk
Copy link

Environment

  • Android OS version: 14
  • Devices affected: Google Pixel 7 (emulator and physical device)
  • Maps SDK Version: 11.0.0-beta.2 and all newer versions (was working correctly with 11.0.0-beta.1)

Observed behavior and steps to reproduce

The app is crashing during start with the following log:

FATAL EXCEPTION: main
Process: de.maxity.mapbox.demo, PID: 8166
java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__emutls_get_address" referenced by "/data/app/~~p9KGFhN8eM71LhLks11adw==/de.maxity.mapbox.demo-b8wpWXy-Khe8eYEA6a-f2w==/lib/x86_64/libmapbox-common.so"...
at android.app.ActivityThread.installProvider(ActivityThread.java:7467)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6973)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6744)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: androidx.startup.StartupException: androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__emutls_get_address" referenced by "/data/app/~~p9KGFhN8eM71LhLks11adw==/de.maxity.mapbox.demo-b8wpWXy-Khe8eYEA6a-f2w==/lib/x86_64/libmapbox-common.so"...
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2451)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.app.ActivityThread.installProvider(ActivityThread.java:7462)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6973)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6744)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: androidx.startup.StartupException: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__emutls_get_address" referenced by "/data/app/~~p9KGFhN8eM71LhLks11adw==/de.maxity.mapbox.demo-b8wpWXy-Khe8eYEA6a-f2w==/lib/x86_64/libmapbox-common.so"...
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:173)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2451)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.app.ActivityThread.installProvider(ActivityThread.java:7462)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6973)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6744)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__emutls_get_address" referenced by "/data/app/~~p9KGFhN8eM71LhLks11adw==/de.maxity.mapbox.demo-b8wpWXy-Khe8eYEA6a-f2w==/lib/x86_64/libmapbox-common.so"...
at java.lang.Runtime.loadLibrary0(Runtime.java:1077)
at java.lang.Runtime.loadLibrary0(Runtime.java:998)
at java.lang.System.loadLibrary(System.java:1661)
at com.mapbox.common.loader.MapboxLibraryLoader.load(MapboxLibraryLoader.kt:19)
at com.mapbox.common.CoreInitializer.create(CoreInitializer.kt:98)
at com.mapbox.common.CoreInitializer.create(CoreInitializer.kt:12)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:173)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2451)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2421)
at android.app.ActivityThread.installProvider(ActivityThread.java:7462)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6973)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6744)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

Expected behavior

The app should not crash on start.

Notes / preliminary analysis

We are using the NativeScript framework to develop our apps, so it is hard to create a sample project that you would be able to run (without installing all the NativeScript stuff). And of course, I know that you guys are not officially supporting that framework.

But as I already mentioned here my issue occurred for the first time when using com.mapbox.maps:android:11.0.0-beta.2
However, it was working as expected using 11.0.0-beta.1 (and also v10 and v9 before).

Additional links and references

@kiryldz
Copy link
Contributor

kiryldz commented Feb 1, 2024

@felixkrautschuk many thanks for the detailed ticket. The root cause is clear and it is that Mapbox Maps v10 are built with NDK 21 while Mapbox Maps v11 are built with NDK 23. There are no easy workarounds sadly apart from aligning all your 3d party dependencies with C++ code to have the c++_shared.so built with the same NDK toolchain.

We are not planning for now supporting Maps v11 built with NDK 21.

However quick googling showed that NativeScript just bumped to NDK 23 as well, see NativeScript/android#1803 and it's available in this alpha release, so using this release of NativeScript with Maps v11 should fix the crashes.

@kiryldz kiryldz closed this as completed Feb 1, 2024
@felixkrautschuk
Copy link
Author

@kiryldz thanks for your quick response and the detailed information.
You are right, using the alpha version of @nativescript/android package does the trick!

mapbox-github-ci-writer-public-1 bot pushed a commit that referenced this issue Feb 22, 2024
* Bump GL-Native to v10.16.5, Common to v23.9.0

* Fix unit tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 🪲 Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants