2013-03-20 61 views
0

我已经成功地使用交叉在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 

我会心存感激,如果任何人能帮助我。

+0

好吧,你正在尝试加载'mylib.so',但是你只有'libdash.so'。如果这不是问题,请编辑错误信息,请复制并粘贴正确的错误文本。 – 2013-03-21 07:53:00

+0

你应该在问题中给出正确的描述,你试图加载哪个库?无论如何,我的两分钱是你应该haved使用System.loadLibrary(“破折号”) – auselen 2013-03-21 08:32:32

+0

我已经完成System.loadLibrary(“破折号”); 就像我在错误信息中看到的,android实际上在libs/armeabi/libdash.so下找到lib – 2013-03-21 08:46:08

回答

0

你应该使用的libm,libc中的系统版本和libdl共享库,

LOCAL_LDLIBS := -lm -ldl 

如果不能,静态链接它们。

相关问题