UnsatisfiedLinkError:...:findLibrary返回null

Ste*_*rcz 2 eclipse ubuntu java-native-interface android android-ndk

03-01 14:00:53.556: E/AndroidRuntime(27208): java.lang.UnsatisfiedLinkError: Couldn't load
example from loader dalvik.system.PathClassLoader[DexPathList[[zip file 
"/data/app/com.example.test-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.test-
2, /vendor/lib, /system/lib]]]: findLibrary returned null
Run Code Online (Sandbox Code Playgroud)

我试图在Ubuntu 12上为Android NDK开发设置一个基本环境,我不能让这个错误消失.我的系统已经设置为使用SDK进行常规Android开发.我已经安装了eclipse C/C++开发工具.

我的.bashrc在底部有这些行:

NDK_HOME=~/android-ndk-r9c
export NDK_HOME
export PATH=/home/steve/android-ndk-r9c:${PATH}
export NDK_PATH=/home/steve/android-ndk-r9c
Run Code Online (Sandbox Code Playgroud)

在我的Eclipse属性中,我在Android-> NDK中的NDK位置设置为/ home/steve/android-ndk-r9c.我的Android.mk看起来如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := test
LOCAL_SRC_FILES := example.c

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

我尝试在命令行上使用build-ndk.我现在在我的项目目录中有一个文件obj/local/armeabi/libtest.so,但它对我没有任何帮助.

对于它的价值,没有项目可行,甚至NDK示例项目(例如HelloJni)也没有.如何编译基本的JNI应用程序?

编辑:这是在一个实际的设备上.hello-jni的nd​​k-build输出是:

[armeabi-v7a] Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup       : libs/armeabi-v7a/gdb.setup
[armeabi] Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
[armeabi] Gdbsetup       : libs/armeabi/gdb.setup
[x86] Gdbserver      : [x86-4.6] libs/x86/gdbserver
[x86] Gdbsetup       : libs/x86/gdb.setup
[mips] Gdbserver      : [mipsel-linux-android-4.6] libs/mips/gdbserver
[mips] Gdbsetup       : libs/mips/gdb.setup
[armeabi-v7a] Compile thumb  : hello-jni <= hello-jni.c
[armeabi-v7a] SharedLibrary  : libhello-jni.so
[armeabi-v7a] Install        : libhello-jni.so => libs/armeabi-v7a/libhello-jni.so
[armeabi] Compile thumb  : hello-jni <= hello-jni.c
[armeabi] SharedLibrary  : libhello-jni.so
[armeabi] Install        : libhello-jni.so => libs/armeabi/libhello-jni.so
[x86] Compile        : hello-jni <= hello-jni.c
[x86] SharedLibrary  : libhello-jni.so
[x86] Install        : libhello-jni.so => libs/x86/libhello-jni.so
[mips] Compile        : hello-jni <= hello-jni.c
[mips] SharedLibrary  : libhello-jni.so
[mips] Install        : libhello-jni.so => libs/mips/libhello-jni.so
Run Code Online (Sandbox Code Playgroud)

Seb*_*ano 6

加载共享库的正确方法是

static {
    System.loadLibrary("test");
}
Run Code Online (Sandbox Code Playgroud)

库名称取自LOCAL_MODULEAndroid.mk文件的定义(如果您决定使用它,则从Application.mk文件中获取).在您的情况下,您正在命名模块测试.该ndk-build生成的共享库libtest.so.

请注意,您不需要在调用中包含lib-前缀System.loadLibrary().