【问题标题】:Archos 101 Tablet System.load() fails when loading ndk lib加载 ndk lib 时,Archos 101 Tablet System.load() 失败
【发布时间】:2011-12-09 15:24:05
【问题描述】:

我有一个同时具有 java 和 NDK(C 代码)的应用程序。此应用在摩托罗拉 Xoom 上运行良好,但在爱可视 101 平板电脑上运行失败。

这是有问题的代码:

    static {
    try
    {
        System.loadLibrary("cube");
    }
    catch (Exception ex)
    {
        Log.d("scroll", ex.getMessage());
    }
}

这是关于错误的 logcat 转储:

DEBUG/dalvikvm(10198): Trying to load lib /data/data/com.gorglucks.cubendk/lib/libcube.so 0x45497b18
INFO/dalvikvm(10198): Unable to dlopen(/data/data/com.gorglucks.cubendk/lib/libcube.so): Cannot load library: link_image[1995]: failed to link libcube.so
WARN/dalvikvm(10198): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lcom/gorglucks/cubendk/Main;.<clinit>
WARN/dalvikvm(10198): Class init failed in newInstance call (Lcom/gorglucks/cubendk/Main;)
DEBUG/AndroidRuntime(10198): Shutting down VM
WARN/dalvikvm(10198): threadid=1: thread exiting with uncaught exception (group=0x4001d8a8)
ERROR/AndroidRuntime(10198): FATAL EXCEPTION: main
ERROR/AndroidRuntime(10198): java.lang.ExceptionInInitializerError
ERROR/AndroidRuntime(10198):     at java.lang.Class.newInstanceImpl(Native Method)
ERROR/AndroidRuntime(10198):     at java.lang.Class.newInstance(Class.java:1429)
ERROR/AndroidRuntime(10198):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
ERROR/AndroidRuntime(10198):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
ERROR/AndroidRuntime(10198):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
ERROR/AndroidRuntime(10198):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
ERROR/AndroidRuntime(10198):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
ERROR/AndroidRuntime(10198):     at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/AndroidRuntime(10198):     at android.os.Looper.loop(Looper.java:123)
ERROR/AndroidRuntime(10198):     at android.app.ActivityThread.main(ActivityThread.java:4627)
ERROR/AndroidRuntime(10198):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(10198):     at java.lang.reflect.Method.invoke(Method.java:521)
ERROR/AndroidRuntime(10198):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(10198):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(10198):     at dalvik.system.NativeStart.main(Native Method)
ERROR/AndroidRuntime(10198): Caused by: java.lang.UnsatisfiedLinkError: Library cube not found
ERROR/AndroidRuntime(10198):     at java.lang.Runtime.loadLibrary(Runtime.java:461)
ERROR/AndroidRuntime(10198):     at java.lang.System.loadLibrary(System.java:557)
ERROR/AndroidRuntime(10198):     at com.gorglucks.cubendk.Main.<clinit>(Main.java:24)
ERROR/AndroidRuntime(10198):     ... 15 more

我的 C 库 libcube.so 位于 libs/armeabi/libcube.so 中,并显示在 eclipse 项目资源管理器中。我已经通过查看 CubeNDK.apk 验证了这一点。

我还尝试使用以下方法加载库:

System.load("/data/data/com.gorglucks.cubendk/lib/armeabi/libcube.so");

这也失败了。

同样,这在摩托罗拉 Xoom 上运行良好。总的来说,使用这款 Archos 101 非常令人沮丧。 USB 驱动程序不适用于我在 64 位 PC 上,但适用于较旧的 32 位 PC。

提前致谢 杰瑞

【问题讨论】:

  • 您确定 libcube 没有尝试加载目录中不存在的另一个库吗?
  • 我很确定一切都存在,这是我的包含:#include #include #include #include #include #include #include #include #include #include #include
  • LOCAL_MODULE := cube LOCAL_CFLAGS := -DANDROID_NDK LOCAL_SRC_FILES := cube.c DDSOpengl.c DDSReader.c screenGrab.c PVROpengl.c PVRReader.c LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog LOCAL_LDLIBS += -landroid

标签: java android android-ndk archos


【解决方案1】:

通过消除过程并深入研究文档 android-ndk-r7/docs/STABLE-APIS.html,资产管理器在 API 级别 8 (Froyo) 中不可用。

这解决了我的链接问题,但产生了另一个问题:

如何在不使用资产管理器的情况下从 ndk 访问资产目录中的文件?

【讨论】:

  • 如果您还有其他问题,请单独发布。此外,android-ndk-r7/docs/STABLE-APIS.html 成为一个有效的超链接会很有帮助。祝你的问题好运。
猜你喜欢
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 2019-04-11
  • 2022-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多