Android 不满意的链接错误:…:findLibrary返回null
我正试图在Ubuntu12上为Android NDK开发建立一个基本环境,但我无法消除这个错误。我的系统已经设置为使用SDK进行常规Android开发。我已经安装了EclipseC/C++开发工具 My.bashrc在底部有以下几行: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
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");
}