【问题标题】:Android Link Error安卓链接错误
【发布时间】:2010-11-30 05:05:16
【问题描述】:

我正在运行 Ubuntu 10.10

我没有使用 NDK

我在 DS-5 中编译了我的 ARM 共享库(ARM 的开发工具集,http://www.keil.com/arm/ds5/)。当我将它们放在 libs/armeabi 下并调用 System.loadLibrary() 时,它找不到它们。

课程如下:

package org.me.testds5;

//a JNI wrapper class
public class WrapMyNative
{
    static
    {
            //ERROR HERE
            //note that calling
            //System.loadLibrary("libAddSub"); generates the same error
        System.loadLibrary("AddSub");
    }

    //some native functions
    public native int add(int a, int b);
    public native int sub(int n, int m);

}

库的确切名称是 libAddSub.so

LogCat:

11-30 04:54:11.273: ERROR/AndroidRuntime(372): FATAL EXCEPTION: main
11-30 04:54:11.273: ERROR/AndroidRuntime(372): java.lang.ExceptionInInitializerError
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at org.me.testds5.TestDS5.onCreate(TestDS5.java:13)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.os.Looper.loop(Looper.java:123)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at android.app.ActivityThread.main(ActivityThread.java:4627)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at java.lang.reflect.Method.invokeNative(Native Method)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at java.lang.reflect.Method.invoke(Method.java:521)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at dalvik.system.NativeStart.main(Native Method)
11-30 04:54:11.273: ERROR/AndroidRuntime(372): Caused by: java.lang.UnsatisfiedLinkError: Library AddSub not found
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at java.lang.Runtime.loadLibrary(Runtime.java:461)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at java.lang.System.loadLibrary(System.java:557)
11-30 04:54:11.273: ERROR/AndroidRuntime(372):     at org.me.testds5.WrapMyNative.<clinit>(WrapMyNative.java:7)

【问题讨论】:

    标签: android arm loadlibrary


    【解决方案1】:

    首先,您确实应该使用 ndk 而不是其他 gcc 构建,例如 codesourcery,尤其是非 gcc 编译器,它甚至可能无法生成兼容格式的目标文件。

    其次,作为一个实验,尝试使用 system.load() 代替它采用完整的路径名。但是,如果您不使用 ndk gcc,仍要为问题做好准备。

    【讨论】:

    • 我正在使用 ndk 的替代方案,因为我似乎无法让 NDK 构建任何 OpenGL ES。我认为二进制文件是兼容的,因为 ARM 本身支持构建
    • 不同编译器的输出一般不兼容。您在这里不是针对裸机 ARM 内核,而是针对 android 运行时链接器及其运行的 linux。我确实相信 android 已经有一个 OpenGL ES,所以也许你可以从中建立一个构建系统(或更多)?
    • 需要更改 TARGET_PLATFROM := 'android-4'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多