【问题标题】:Android: Cannot load library (94 missing essential tables)Android:无法加载库(缺少 94 个基本表)
【发布时间】:2012-07-31 07:55:24
【问题描述】:

我正在开发一个使用庞大本机库的 Android 应用程序。一些客户抱怨启动时崩溃,其中一位给了我们他的 logcat 转储:

07-19 10:55:15.139 E/AndroidRuntime(16539)FATAL EXCEPTION: AsyncTask #3
07-19 10:55:15.139 E/AndroidRuntime(16539)java.lang.RuntimeException: An error occured while executing doInBackground()
07-19 10:55:15.139 E/AndroidRuntime(16539)at android.os.AsyncTask$3.done(AsyncTask.java:200)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask.run(FutureTask.java:138)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.lang.Thread.run(Thread.java:1019)
07-19 10:55:15.139 E/AndroidRuntime(16539)Caused by: java.lang.ExceptionInInitializerError
07-19 10:55:15.139 E/AndroidRuntime(16539)at my.app.appinit.NativeInitAsyncTask.doInBackground(NativeInitAsyncTask.java:86)
07-19 10:55:15.139 E/AndroidRuntime(16539)at my.app.appinit.NativeInitAsyncTask.doInBackground(NativeInitAsyncTask.java:44)
07-19 10:55:15.139 E/AndroidRuntime(16539)at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
07-19 10:55:15.139 E/AndroidRuntime(16539)... 4 more
07-19 10:55:15.139 E/AndroidRuntime(16539)Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1935]:    94 missing essential tables
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.lang.Runtime.loadLibrary(Runtime.java:434)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.lang.System.loadLibrary(System.java:554)
07-19 10:55:15.139 E/AndroidRuntime(16539)at nativewrapper.NativeObject.<clinit>(NativeObject.java:30)
07-19 10:55:15.139 E/AndroidRuntime(16539)... 8 more
07-19 10:55:15.179 W/ActivityManager(162)Force finishing activity my.app.packagename/my.app.FirstActivity

客户的手机型号是三星 Galaxy Ace (gt-s5830)。 通过在互联网上挖掘,我从 Android 链接器 (http://source-android.frandroid.com/bionic/linker/linker.c) 中找到了这段代码:看着它,似乎 zygote (pid 94) 无法为我的应用程序 (pid 1935) 加载库,我可以'找不到任何提示或解决方法来解决这个问题,有什么想法吗? 谢谢。

【问题讨论】:

  • “巨大的原生库”。什么图书馆?
  • 意味着我的专有库非常大(4.5mb)并且有很多功能。
  • 某种第三方库或您开发的东西?
  • 这是一个未预编译的第三方库,源代码可供我使用,我从 Android 1.6 开始编译它,过去使用 android-ndk-r4-crystax 和今天的 android-ndk-r6。

标签: android linker android-ndk


【解决方案1】:

使用最新的 ndk 版本更新您的应用程序构建。

java.lang.UnsatisfiedLinkError

发生异常是因为找不到本机库(Windows 上的 DLL/Linux 上的 SO)。在 UNIX 和其他系统上,它也可能是由系统上的运行时库与与预构建的本机库关联的运行时库之间的版本差异引起的。

【讨论】:

    【解决方案2】:

    这似乎是“加载库”的静态块中的错误。

    检查这些东西

    1. 从库名的开头删除“lib”,从库名的末尾删除“.so”。 例如:如果库是 libTest.so

    你在静态块中的代码应该是

    static{
    
    System.loadLibrary("Test");
    
    }
    
    1. 确保清理您的项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多