我已经成功地使用交叉在Android NDK 独立的工具链编制了C++库到Android。平台。 我创建了一个新的android应用程序项目到Eclipse与jni dolder和Android.mk文件,当我做一个ndk构建建设顺利,它将mylib.so添加到libs/armeabi文件夹 问题是当我做一个System.loadLibrary(“mylibname”); 我在logcat中出现以下错误: 无法dlopen(/data/data/com.oussama.firsttry/lib/libdash.so):无法加载库:link_image [1995]:无法链接libdash.so 导致一个java.lang.UnsatisfiedLinkError:找不到我的lib **。没有找到java.lang.UnsatisfiedLinkError中lib目录下:(未链接mylib.so)
必须有我的LIB取决于和仿真器无法加载,所以我做了一个库readelf -d mylib.so这里是结果:
动态部分的偏移量0x1617c4包含26项:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libm.so]
0x00000001 (NEEDED) Shared library: [libc.so]
0x00000001 (NEEDED) Shared library: [libdl.so]
0x0000000e (SONAME) Library soname: [libdash.so]
0x00000010 (SYMBOLIC) 0x0
0x0000000f (RPATH) Library rpath: [/home/oussama064/libdash/libdash/../../neededLibs]
0x00000019 (INIT_ARRAY) 0x157268
0x0000001b (INIT_ARRAYSZ) 172 (bytes)
0x0000001a (FINI_ARRAY) 0x157314
0x0000001c (FINI_ARRAYSZ) 8 (bytes)
0x00000004 (HASH) 0xf4
0x00000005 (STRTAB) 0x10f58
0x00000006 (SYMTAB) 0x50b8
0x0000000a (STRSZ) 134112 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000003 (PLTGOT) 0x1618b4
0x00000002 (PLTRELSZ) 1096 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x40dd8
0x00000011 (REL) 0x31b38
0x00000012 (RELSZ) 62112 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x00000018 (BIND_NOW)
0x6ffffffb (FLAGS_1) Flags: NOW
0x6ffffffa (RELCOUNT) 7738
0x00000000 (NULL) 0x0
这里是我的Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := libcurl LOCAL_SRC_FILES :=
../../../../neededLibs/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := libxml LOCAL_SRC_FILES :=
../../../../neededLibs/libxml2.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := libz LOCAL_SRC_FILES :=
../../../../neededLibs/libz.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := m LOCAL_SRC_FILES :=
libm.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS)
LOCAL_MODULE := dl LOCAL_SRC_FILES := libdl.so
include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE
:= c LOCAL_SRC_FILES := libc.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := d LOCAL_SRC_FILES := libdash.so
LOCAL_SHARED_LIBRARIES := c m dl
LOCAL_STATIC_LIBRARIES := libz libxml libcurl include
$(PREBUILT_SHARED_LIBRARY)
我'现在真的卡住,我想不出w ^帽子是缺少库
当我做一个NDK建造V = 1 -B我得到以下结果:
rm -f /home/oussama064/Android/workspace/FirstTry/libs/armeabi/lib*.so
/家庭/ oussama064 /安卓/工作区/ FirstTry /库/ armeabi-V7A /lib*.so /home/oussama064/Android/workspace/FirstTry/libs/mips/lib*.so /home/oussama064/Android/workspace/FirstTry/libs/x86/lib*.so rm -f/home/oussama064/Android/workspace/FirstTry/libs/armeabi/gdbserver /home/oussama064/Android/workspace/FirstTry/libs/armeabi-v7a/gdbserver /home/oussama064/Android/workspace/FirstTry/libs/mips/gdbserver /home/oussama064/Android/workspace/FirstTry/libs/x86/gdbserver rm -f /home/oussama064/Android/workspace/FirstTry/libs/armeabi/gdb.setup /home/oussama064/Android/workspace/FirstTry /libs/armeabi-v7a/gdb.setup /home/oussama064/Android/workspace/FirstTry/libs/mips/gdb.setup /home/oussama064/Android/workspace/FirstTry/libs/x86/gdb.setup make :圆形obj/local/armeabi/libm.so < - obj/local/armeabi/libm.so依赖关系 已下降。 make:Circular obj/local/armeabi/libm.so < - obj/local/armeabi/libc.so dependency dropped。 make:Circular obj/local/armeabi/libdl.so < - obj/local/armeabi/libm.so dependency dropped。 make:Circular obj/local/armeabi/libdl.so < - obj/local/armeabi/libc.so dependency dropped。 make:Circular obj/local/armeabi/libdl.so < - obj/local/armeabi/libdl.so dependency dropped。 预建:libdl.so < = /家庭/ oussama064 /安卓/工作区/ FirstTry/JNI/ CP -f /home/oussama064/Android/workspace/FirstTry/jni/libdl.so
OBJ /本地/ armeabi/libdl .so 预建:libm。所以< =/home/oussama064/Android/workspace/FirstTry/jni/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/libm.so obj/local/armeabi/libm.so make:Circular obj /local/armeabi/libc.so < - 删除了obj/local/armeabi/libc.so依赖项。 Prebuilt:libc.so < =/home/oussama064/Android/workspace/FirstTry/jni/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/libc.so obj/local/armeabi/libc.so 安装:libc.so => /home/oussama064/Android/workspace/FirstTry/libs/armeabi/libc.so 安装-p ./obj/local/armeabi/libc.so
/家/ oussama064/Android的/workspace/FirstTry/libs/armeabi/libc.so /home/oussama064/NDK/android-ndk-r8d/toolchains/arm-linux-androideabi- 4.6/prebuilt/linux-x86/bin/arm-linux-androideabi -strip --strip-unneeded
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libc.so 预建:libxml2.a < =
/home/oussama064/Android/workspace/FirstTry/jni/../../../../neededLibs/ CP -f
/家/ oussama064/Android设备/工作区/ FirstTry/JNI/../../../../neededLibs/libxml2.a obj/local/armeabi/libxml2.a 预建:libcurl.a < = /home/oussama064/Android/workspace/FirstTry/jni /。 ./../../../neededLibs/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/../../../../neededLibs/libcurl.a
obj/local/armeabi/libcurl.a 预建:libdash.so < =/home/oussama064/Android/workspace/FirstTry/jni/
cp -f /home/oussama064/Android/workspace/FirstTry/jni/libdash.so
obj/local/armeabi/libdash.so
Install : libdash.so =>
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdash.so
install -p ./obj/local/armeabi/libdash.so
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdash.so
/home/oussama064/NDK/android-ndk-r8d/toolchains/arm-linux-androideabi-
4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-strip --strip-unneeded
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdash.so
Install : libdl.so =>
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdl.so
install -p ./obj/local/armeabi/libdl.so
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdl.so /家庭/ oussama064/NDK/Android的NDK-R 8d中/工具链/ ARM-Linux的androideabi-
4.6 /预建/ Linux的-86 /斌/ ARM-Linux的androideabi条--strip-不需要
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdl.so
Install : libm.so =>
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libm.so
install -p ./obj/local/armeabi/libm.so
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libm.so
/home/oussama064/NDK/android-ndk-r8d/toolchains/arm-linux-androideabi-
4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-strip --strip-unneeded
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libm.so
我会心存感激,如果任何人能帮助我。
好吧,你正在尝试加载'mylib.so',但是你只有'libdash.so'。如果这不是问题,请编辑错误信息,请复制并粘贴正确的错误文本。 – 2013-03-21 07:53:00
你应该在问题中给出正确的描述,你试图加载哪个库?无论如何,我的两分钱是你应该haved使用System.loadLibrary(“破折号”) – auselen 2013-03-21 08:32:32
我已经完成System.loadLibrary(“破折号”); 就像我在错误信息中看到的,android实际上在libs/armeabi/libdash.so下找到lib – 2013-03-21 08:46:08