Android 不满意的链接错误:…:findLibrary返回null

Android 不满意的链接错误:…:findLibrary返回null,android,eclipse,ubuntu,android-ndk,java-native-interface,Android,Eclipse,Ubuntu,Android Ndk,Java Native Interface,我正试图在Ubuntu12上为Android NDK开发建立一个基本环境,但我无法消除这个错误。我的系统已经设置为使用SDK进行常规Android开发。我已经安装了EclipseC/C++开发工具 My.bashrc在底部有以下几行: 03-01 14:00:53.556: E/AndroidRuntime(27208): java.lang.UnsatisfiedLinkError: Couldn't load example from loader dalvik.system.PathCla

我正试图在Ubuntu12上为Android NDK开发建立一个基本环境,但我无法消除这个错误。我的系统已经设置为使用SDK进行常规Android开发。我已经安装了EclipseC/C++开发工具

My.bashrc在底部有以下几行:

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
在我的Eclipse属性中,我在Android->NDK中的NDK位置设置为/home/steve/Android-NDK-r9c。我的Android.mk如下所示:

NDK_HOME=~/android-ndk-r9c
export NDK_HOME
export PATH=/home/steve/android-ndk-r9c:${PATH}
export NDK_PATH=/home/steve/android-ndk-r9c
我尝试在命令行上使用buildndk。现在,我的项目目录中有一个文件obj/local/armeabi/libtest.so,但它对我没有任何好处

值得一提的是,没有一个项目是有效的,即使是NDK示例项目(如HelloJni)也不行。我可以做什么来编译一个基本的JNI应用程序

编辑:这是在实际设备上。hello jni的ndk构建输出是:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := test
LOCAL_SRC_FILES := example.c

include $(BUILD_SHARED_LIBRARY)
[armeabi-v7a]Gdbserver:[arm-linux-androideabi-4.6]libs/armeabi-v7a/Gdbserver
[armeabi-v7a]gdb设置:libs/armeabi-v7a/gdb.setup
[armeabi]Gdbserver:[arm-linux-androideabi-4.6]libs/armeabi/Gdbserver
[armeabi]gdb设置:libs/armeabi/gdb.setup
[x86]Gdbserver:[x86-4.6]libs/x86/Gdbserver
[x86]gdb设置:libs/x86/gdb.setup
[mips]Gdbserver:[mipsel-linux-android-4.6]libs/mips/Gdbserver
[mips]gdb设置:libs/mips/gdb.setup
[armeabi-v7a]编译thumb:hello-jni-libs/armeabi-v7a/libhello-jni.so
[armeabi]编译thumb:hello-jni-libs/armeabi/libhello-jni.so
[x86]编译:hello-jni-libs/x86/libhello-jni.so
[mips]编译:hello-jni-libs/mips/libhello-jni.so

加载共享库的正确方法是

[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
库名称取自Android.mk文件的
LOCAL_MODULE
定义(或者取自Application.mk文件,如果您决定使用它)。在您的例子中,您将模块命名为test。ndk构建生成共享库
libtest.so


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

在哪里运行示例?它是真实的设备还是模拟器?我在真实的设备上运行。奇怪。您遇到的错误是由于您的libs/目录中没有任何
libtest.so
文件。对于
hello jni
项目,
ndk build
命令的输出是什么?03-01 15:10:01.675:E/AndroidRuntime(31807):java.lang.UnsatisfiedLinkError:无法从加载程序dalvik.system.PathClassLoader[DexPathList[[zip文件”//data/app/com.example.hellojni-1.apk]、NativeLibrary目录加载hello jni=[/data/app lib/com.example.hellojni-1,/vendor/lib,/system/lib]]:findLibrary返回Null,这是Android日志输出。在您的计算机上,导航到hello jni/jni目录,在那里打开控制台并执行
ndk build
命令。然后在此处发布该命令的输出。是的,当您要求查看我的load语句时,我看到了我犯的错误。感谢您的帮助。很高兴我帮助了您美国犹他州!
static {
    System.loadLibrary("test");
}