【问题标题】:Android NDK: dlopen failed: cannot locate symbol "__gnu_thumb1_case_uqi"Android NDK:dlopen 失败:找不到符号“__gnu_thumb1_case_uqi”
【发布时间】:2014-03-18 12:06:53
【问题描述】:

我的 NDK 游戏在 Debug 模式下运行良好,但在发布时崩溃并在 Nexus 7 上显示以下日志:

E dalvikvm: dlopen("/data/app-lib/com.js.pathoflight-1/libPathOfLight.so") failed: dlopen failed: cannot locate symbol "__gnu_thumb1_case_uqi" referenced by 
"libPathOfLight.so"...  
W dalvikvm: Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/js  /pathoflight/JSNativeActivity;  
W dalvikvm: Class init failed in newInstance call (Lcom/js/pathoflight/JSNativeActivity;)  
D AndroidRuntime: Shutting down VM  
W dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41b01700)  
E AndroidRuntime: FATAL EXCEPTION: main  
E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol   "__gnu_thumb1_case_uqi" referenced by "libPathOfLight.so"...  
E AndroidRuntime:   at java.lang.Runtime.loadLibrary(Runtime.java:361)  
E AndroidRuntime:   at java.lang.System.loadLibrary(System.java:525)  
E AndroidRuntime:   at com.js.pathoflight.JSNativeActivity.<clinit>(JSNativeActivity.java:59)  
E AndroidRuntime:   at java.lang.Class.newInstanceImpl(Native Method)    
E AndroidRuntime:   at java.lang.Class.newInstance(Class.java:1130)  
E AndroidRuntime:   at android.app.Instrumentation.newActivity(Instrumentation.java:1061)  
E AndroidRuntime:   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)  
E AndroidRuntime:   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)  
E AndroidRuntime:   at android.app.ActivityThread.access$600(ActivityThread.java:141)
E AndroidRuntime:   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
E AndroidRuntime:   at android.os.Handler.dispatchMessage(Handler.java:99)  
E AndroidRuntime:   at android.os.Looper.loop(Looper.java:137)  
E AndroidRuntime:   at android.app.ActivityThread.main(ActivityThread.java:5103)  
E AndroidRuntime:   at java.lang.reflect.Method.invokeNative(Native Method)  
E AndroidRuntime:   at java.lang.reflect.Method.invoke(Method.java:525)  
E AndroidRuntime:   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)  
E AndroidRuntime:   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  
E AndroidRuntime:   at dalvik.system.NativeStart.main(Native Method)  
W ActivityManager:   Force finishing activity com.js.pathoflight/.JSNativeActivity

我会很感激任何建议。

【问题讨论】:

  • 似乎找不到您的本机库。您是否确保您的 .so 文件已安装在您的发布版本中?
  • 这个答案stackoverflow.com/a/14242601/192373 未被接受,但也许它会对你有所帮助。
  • @MichaelMarsella 我在 apk 和设备上都看到了 .so
  • 不幸的是,NDK 不会在其任何库中导出 __gnu_thumb1_case_uqi。尝试为 ARM 编译你的库(在 Android.mk 中使用 LOCAL_ARM_MODE := arm)。
  • @AlexCohn 感谢您的所有建议,我找到了解决方法。

标签: android android-ndk


【解决方案1】:

在删除代码的不同部分时,我发现问题出在我使用的第 3 方库中。
我将它的用法从“gnustl_static”版本(.a)更改为“gnustl_shared”(.so)版本,问题就消失了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2016-11-15
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多