
的System.loadlibrary( “sharedC”);
sharedC依赖于另外两个共享库sharedA和sharedB,这三个共享库都是使用独立工具链创建的,并作为预构建的共享库包含在内.我在sharedC之前加载sharedA和sharedB,我知道没有其他依赖项.但是当我尝试加载sharedC时,我得到了一个SEGV.当我运行strace时,这就是我得到的:
writev(3,[{"",1},{"dalvikvmUpdate 1
",9},{"Trying to load lib /data/data/com.example.hellojni/lib/libsharedC.so 0x44e8ce28\n03-23 23:37:14.213: I/DEBUG(28): *** *** *** *** *** *** *** *** ****** *** *** *** *** *** ***03-23 23:37:14.213: I/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys'03-23 23:37:14.224: I/DEBUG(28): pID: 332,tID: 332 >>>com.example.hellojni <<<03-23 23:37:14.224: I/DEBUG(28): signal 11 (SIGSEGV),fault addr0000000003-23 23:37:14.224: I/DEBUG(28): r0 00000000 r1 00000000 r280808080 r3 0000000003-23 23:37:14.224: I/DEBUG(28): r4 00000000 r5 bea8154c r6bea81600 r7 0000000003-23 23:37:14.224: I/DEBUG(28): r8 bea81820 r9 41971894 1000000354 fp bea814fc03-23 23:37:14.224: I/DEBUG(28): ip 80a81058 sp bea814c0 lr80a63cd8 pc afe0e7c8 cpsr 4000001003-23 23:37:14.313: I/DEBUG(28): #00 pc 0000e7c8 /system/lib/libc.so03-23 23:37:14.313: I/DEBUG(28): #01 pc 00063cd4 /data/data/com.example.hellojni/lib/libgnustl_shared.so03-23 23:37:14.323: I/DEBUG(28): code around pc:03-23 23:37:14.323: I/DEBUG(28): afe0e7b8 e31c0003 1afffff6 e1a00002e59f20d803-23 23:37:14.323: I/DEBUG(28): afe0e7c8 e490c004 e0433000 f5d0f040e04c13a203-23 23:37:14.323: I/DEBUG(28): afe0e7d8 e0011002 e1d1100c 0490c0041a00002203-23 23:37:14.323: I/DEBUG(28): code around lr:03-23 23:37:14.323: I/DEBUG(28): 80a63cc8 e1a05000 e1a00001 e1a04001ebff27d003-23 23:37:14.323: I/DEBUG(28): 80a63cd8 e1a01004 e1a02000 e1a00005e8bd407003-23 23:37:14.323: I/DEBUG(28): 80a63ce8 eaffffa0 e590c000 e92d45f0e51ce00c03-23 23:37:14.323: I/DEBUG(28): stack:03-23 23:37:14.323: I/DEBUG(28): bea81480 001479d0 [heap]03-23 23:37:14.323: I/DEBUG(28): bea81484 bea81820 [stack]03-23 23:37:14.323: I/DEBUG(28): bea81488 41971894 /dev/ashmem/dalvik-linearalloc (deleted)03-23 23:37:14.323: I/DEBUG(28): bea8148c 0000035403-23 23:37:14.334: I/DEBUG(28): bea81490 bea814fc [stack]03-23 23:37:14.334: I/DEBUG(28): bea81494 00147a24 [heap]03-23 23:37:14.334: I/DEBUG(28): bea81498 0000000603-23 23:37:14.334: I/DEBUG(28): bea8149c 80a63b58 /data/data/com.example.hellojni/lib/libgnustl_shared.so03-23 23:37:14.334: I/DEBUG(28): bea814a0 0000000603-23 23:37:14.334: I/DEBUG(28): bea814a4 bea81548 [stack]03-23 23:37:14.334: I/DEBUG(28): bea814a8 80a8211003-23 23:37:14.334: I/DEBUG(28): bea814ac 0000000003-23 23:37:14.334: I/DEBUG(28): bea814b0 bea81820 [stack]03-23 23:37:14.334: I/DEBUG(28): bea814b4 80a63bcc /data/data/com.example.hellojni/lib/libgnustl_shared.so03-23 23:37:14.334: I/DEBUG(28): bea814b8 df00277703-23 23:37:14.334: I/DEBUG(28): bea814bc e3a070ad03-23 23:37:14.344: I/DEBUG(28): #00 bea814c0 bea814d4 [stack]03-23 23:37:14.344: I/DEBUG(28): bea814c4 0000000003-23 23:37:14.344: I/DEBUG(28): #01 bea814c8 bea81548 [stack]03-23 23:37:14.344: I/DEBUG(28): bea814cc bea81548 [stack]03-23 23:37:14.344: I/DEBUG(28): bea814d0 bea81600 [stack]03-23 23:37:14.344: I/DEBUG(28): bea814d4 8131f228 /data/data/com.example.hellojni/lib/libsharedB.so03-23 23:37:14.344: I/DEBUG(28): bea814d8 afe39190 /system/lib/libc.so03-23 23:37:14.344: I/DEBUG(28): bea814dc bea8152c [stack]03-23 23:37:14.344: I/DEBUG(28): bea814e0 001479a0 [heap]03-23 23:37:14.344: I/DEBUG(28): bea814e4 bea81548 [stack]03-23 23:37:14.344: I/DEBUG(28): bea814e8 80a8211c03-23 23:37:14.344: I/DEBUG(28): bea814ec 001479a0 [heap]03-23 23:37:14.344: I/DEBUG(28): bea814f0 bea81548 [stack]03-23 23:37:14.344: I/DEBUG(28): bea814f4 bea81548 [stack]03-23 23:37:14.344: I/DEBUG(28): bea814f8 bea8151c [stack]03-23 23:37:14.344: I/DEBUG(28): bea814fc 8131eb8c /data/data/com.example.hellojni/lib/libsharedB.so03-23 23:37:14.344: I/DEBUG(28): bea81500 bea8152c [stack]03-23 23:37:14.344: I/DEBUG(28): bea81504 0000272e03-23 23:37:14.344: I/DEBUG(28): bea81508 80a8212403-23 23:37:14.344: I/DEBUG(28): bea8150c 80a8211c03-23 23:37:14.884: D/Zygote(30): Process 332 terminated by signal(11)03-23 23:37:14.893: I/ActivityManager(52): Processcom.example.hellojni (pID 332) has dIEd.03-23 23:37:14.966: I/UsageStats(52): Unexpected resume ofcom.androID.launcher while already resumed in com.example.hellojni
",83}],3) = 93stat64("/data/data/com.example.hellojni/lib/libsharedC.so",{st_dev=makedev(31,1),st_ino=499,st_mode=S_IFREG|0644,st_nlink=1,st_uID=1000,st_gID=1000,st_blksize=4096,st_blocks=24487,st_size=12536908,st_atime=2012/03/22-21:49:35,st_mtime=2012/03/22-14:48:00,st_ctime=2012/03/22-21:49:41}) = 0open("/data/data/com.example.hellojni/lib/libsharedC.so",O_RDONLY|O_LARGEfile) = 27lseek(27,SEEK_SET) = 0read(27,"7ELFadb.exe logcat | C:\ndk\androID-ndk-r7b\ndk-stack.exe -sym C:\ndk\androID-ndk-r7_Google\samples\hello-jni\obj\local\armeabi********** Crash dump: **********Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys'pID: 332,tID: 332 >>> com.example.hellojni <<<signal 11 (SIGSEGV),fault addr 00000000Stack frame #00 pc 0000e7c8 /system/lib/libc.soStack frame #01 pc 00063cd4 /data/data/com.example.hellojni/lib/libgnustl_shared.so: Unable to locate routine information for address63cd4 in module C:\ndk\androID-ndk-r7_Google\samples\hello-jni\obj\local\armeabi/libgnustl_shared.so
Update 2
file: libpcre.soDynamic section at offset 0x16d8c contains 23 entrIEs: Tag Type name/Value 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOname) library soname: [libpcre.so] 0x00000010 (SYMBOliC) 0x0 0x00000019 (INIT_ARRAY) 0x17d78 0x0000001b (INIT_ARRAYSZ) 8 (bytes) 0x0000001a (FINI_ARRAY) 0x17d80 0x0000001c (FINI_ARRAYSZ) 12 (bytes) 0x00000004 (HASH) 0xb4 0x00000005 (STRTAB) 0x858 0x00000006 (SYMTAB) 0x318 0x0000000a (STRSZ) 1095 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000003 (pltGOT) 0x17e64 0x00000002 (pltRELSZ) 192 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0xcf8 0x00000011 (REL) 0xca0 0x00000012 (RELSZ) 88 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 7 0x00000000 (NulL) 0x0
file: libsharedA.soDynamic section at offset 0xd536c contains 25 entrIEs: Tag Type name/Value 0x00000001 (NEEDED) Shared library:[libgnustl_shared.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOname) library soname:[libsharedA.so] 0x00000010 (SYMBOliC) 0x0 0x00000019 (INIT_ARRAY) 0xd6054 0x0000001b (INIT_ARRAYSZ) 16 (bytes) 0x0000001a (FINI_ARRAY) 0xd6064 0x0000001c (FINI_ARRAYSZ) 16 (bytes) 0x00000004 (HASH) 0xd4 0x00000005 (STRTAB) 0x50cc 0x00000006 (SYMTAB) 0x175c 0x0000000a (STRSZ) 8630 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000003 (pltGOT) 0xd6454 0x00000002 (pltRELSZ) 1832 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0x7ca4 0x00000011 (REL) 0x7284 0x00000012 (RELSZ) 2592 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 219 0x00000000 (NulL) 0x0
file: libsharedB.soDynamic section at offset 0xea6278 contains 28 entrIEs: Tag Type name/Value 0x00000001 (NEEDED) Shared library:[libsharedA.so] 0x00000001 (NEEDED) Shared library: [libpcre.so] 0x00000001 (NEEDED) Shared library:[libgnustl_shared.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOname) library soname:[libsharedB.so] 0x00000010 (SYMBOliC) 0x0 0x0000000f (RPATH) library rpath: [/home/corbin/sharedA/.libs:/home/corbin/pcreout/lib] 0x00000019 (INIT_ARRAY) 0xe9a000 0x0000001b (INIT_ARRAYSZ) 2032 (bytes) 0x0000001a (FINI_ARRAY) 0xe9a7f0 0x0000001c (FINI_ARRAYSZ) 12 (bytes) 0x00000004 (HASH) 0xd4 0x00000005 (STRTAB) 0xaf734 0x00000006 (SYMTAB) 0x2ff44 0x0000000a (STRSZ) 1534855 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000003 (pltGOT) 0xea6378 0x00000002 (pltRELSZ) 4216 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0x2964e4 0x00000011 (REL) 0x2262bc 0x00000012 (RELSZ) 459304 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 9922 0x00000000 (NulL) 0x0
file: libsharedC.soDynamic section at offset 0xed7934 contains 29 entrIEs: Tag Type name/Value 0x00000001 (NEEDED) Shared library:[libsharedB.so] 0x00000001 (NEEDED) Shared library:[libsharedA.so] 0x00000001 (NEEDED) Shared library: [libz.so] 0x00000001 (NEEDED) Shared library:[libgnustl_shared.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOname) library soname:[libsharedC.so] 0x00000010 (SYMBOliC) 0x0 0x0000000f (RPATH) library rpath: [/home/corbin/libsharedB/.libs:/home/corbin/libsharedA/.libs] 0x00000019 (INIT_ARRAY) 0xeb6000 0x0000001b (INIT_ARRAYSZ) 1068 (bytes) 0x0000001a (FINI_ARRAY) 0xeb642c 0x0000001c (FINI_ARRAYSZ) 12 (bytes) 0x00000004 (HASH) 0xd4 0x00000005 (STRTAB) 0xab79c 0x00000006 (SYMTAB) 0x2f28c 0x0000000a (STRSZ) 1557316 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000003 (pltGOT) 0xed7a3c 0x00000002 (pltRELSZ) 45320 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0x296258 0x00000011 (REL) 0x227ae0 0x00000012 (RELSZ) 452472 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 31042 0x00000000 (NulL) 0x0
03-27 20:13:18.483: I/utils(255): trying dlopen of </data/data/com.example.hellojni/lib/libpcre.so>03-27 20:13:18.483: I/utils(255): handle=0xb0012c08 error: Symbol not found: 03-27 20:13:18.483: I/utils(255): trying dlopen of </data/data/com.example.hellojni/lib/libsharedA.so>03-27 20:13:18.503: I/utils(255): handle=0xb0012d20 error: (null)03-27 20:13:18.515: I/utils(255): trying dlopen of </data/data/com.example.hellojni/lib/libsharedB.so>03-27 20:13:19.053: I/utils(255): handle=0xb0012e38 error: (null)03-27 20:13:19.053: I/utils(255): trying dlopen of </data/data/com.example.hellojni/lib/libsharedC.so>03-27 20:13:19.753: I/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***03-27 20:13:19.763: I/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys'03-27 20:13:19.773: I/DEBUG(28): pID: 255,tID: 255 >>> com.example.hellojni <<<03-27 20:13:19.773: I/DEBUG(28): signal 11 (SIGSEGV),fault addr 0000000003-27 20:13:19.773: I/DEBUG(28): r0 00000000 r1 00000000 r2 80808080 r3 0000000003-27 20:13:19.773: I/DEBUG(28): r4 00000000 r5 be890574 r6 be890628 r7 0000000003-27 20:13:19.773: I/DEBUG(28): r8 80b03a18 r9 be890768 10 4186bc28 fp be89052403-27 20:13:19.773: I/DEBUG(28): ip 80a81058 sp be8904e8 lr 80a63cd8 pc afe0e7c8 cpsr 4000001003-27 20:13:19.863: I/DEBUG(28): #00 pc 0000e7c8 /system/lib/libc.so03-27 20:13:19.863: I/DEBUG(28): #01 pc 00063cd4 /data/data/com.example.hellojni/lib/libgnustl_shared.so
androID-linux-addr2line.exe -C -f -e libc.so 0000e7c8strlen??:0androID-linux-addr2line.exe -C -f -e libgnustl_shared.so 00063cd4std::string::operator=(char const*)??:0
#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <jni.h>#include <dlfcn.h>#include <androID/log.h>#define LOG_TAG "utils"#define LOGI(...) __androID_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)#define LOGW(...) __androID_log_print(ANDROID_LOG_WARN,__VA_ARGS__)#define LOGE(...) __androID_log_print(ANDROID_LOG_ERROR,__VA_ARGS__)#define LOGD(...) __androID_log_print(ANDROID_LOG_INFO,__VA_ARGS__)static voID dlopen_impl(jnienv* jenv,jclass clazz,Jstring path){ int pathlen = jenv->GetStringUTFLength(path); char pathb[pathlen + 1]; jenv->GetStringUTFRegion(path,pathlen,pathb); LOGD("trying dlopen of <%s>",pathb); voID* handle = dlopen(pathb,RTLD_Now); LOGD("handle=%p error: %s",handle,dlerror());}static int registerNativeMethods(jnienv* env,const char* classname,const JNINativeMethod* gMethods,int numMethods){ jclass clazz; clazz = env->FindClass(classname); if (clazz == NulL) return -1; int result = 0; if (env->RegisterNatives(clazz,gMethods,numMethods) < 0) result = -1; env->DeleteLocalRef(clazz); return result;}extern "C" jint JNI_OnLoad(JavaVM* vm,voID *);__attribute__((visibility("default")))jint JNI_OnLoad(JavaVM* vm,voID *){ jnienv* jenv; vm->GetEnv((voID**) &jenv,JNI_VERSION_1_4); static const JNINativeMethod m[] = { { "dlopentest","(Ljava/lang/String;)V",(voID*) &dlopen_impl },}; registerNativeMethods(jenv,"com/cowlark/androID/Utils",m,sizeof(m)/sizeof(*m)); return JNI_VERSION_1_4;}package com.antixlabs.agpndk;import java.io.file;public class Utils{ static { System.loadlibrary("agputils"); } public native static voID dlopentest(String path);}(static{ Utils.dlopentest("/data/data/com.cowlark.myapp/lib/libdodgy.so");}°504I┐54 (pΦ4║Φ4║Φ4║@X@X(φ╝(φ╝(φ╝(²╝(²╝4G2°»╛°┐╛°┐╛Qσtd@fJ┴G$,2#j)&45."...,4096) = 4096lseek(27,-8,SEEK_END) = 12536900read(27,"",8) = 8mmap2(0x82000000,12550144,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x82000000mmap2(0x82000000,12381480,MAP_PRIVATE|MAP_FIXED,27,0) = 0x82000000mprotect(0x82000000,12382208,PROT_READ|PROT_WRITE|PROT_EXEC) = 0mmap2(0x82bcf000,152772,PROT_READ|PROT_WRITE,0xbce) = 0x82bcf000mmap2(0x82bf5000,12088,MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,0) = 0x82bf5000close(27) = 0mprotect(0x82000000,PROT_READ|PROT_EXEC) = 0getuID32() = 10030geteuID32() = 10030getgID32() = 10030getegID32() = 10030mprotect(0x41868000,4096,PROT_READ|PROT_WRITE) = 0mprotect(0x41868000,PROT_READ) = 0mprotect(0x41868000,PROT_READ) = 0recv(-2136444848,ptrace: umoven: I/O error0x1,2147483647,0) = 0mprotect(0x41868000,PROT_READ) = 0...mprotect(0x42f02000,PROT_READ|PROT_WRITE) = 0mprotect(0x42f02000,PROT_READ) = 0getcwd(0,0) = -1 ERANGE (Math result not representable)brk(0x37f000) = 0x37f000lstat64(".",{st_dev=makedev(0,st_ino=1,st_mode=S_IFDIR|0755,st_nlink=13,st_uID=0,st_gID=0,st_blksize=4096,st_blocks=0,st_size=0,st_atime=0,st_mtime=2012/03/22-21:46:13,st_ctime=2012/03/22-21:46:13}) = 0lstat64("/",st_ctime=2012/03/22-21:46:13}) = 0getuID32() = 10030--- SIGSEGV (Segmentation fault) @ 0 (0) ---sigaction(SIGUSR1,{SIG_IGN},{SIG_DFL},0) = 0SYS_224(0,0xbea811a0,0) = 224socket(PF_UNIX,SOCK_STREAM,0) = 27connect(27,{sa_family=AF_UNIX,path=@androID:deBUGgerd},20) = 0write(27,"α",4) = 4read(27,0xbea811cc,1) = ? ERESTARTSYS (To be restarted)read(27,"",1) = 0close(27) = 0sigaction(SIGSEGV,{0xb0001d45,[],SA_RESTART},0) = 0sigreturn() = ? (mask Now [HUP QUIT TRAP ABRT BUS])--- SIGSEGV (Segmentation fault) @ 0 (0) ---Process 224 detached 什么出错了?
好的,调试堆栈跟踪对我来说是新的,但请继续跟进
告诉我,如果我做错了或其他?
有趣的是,似乎我是SEGV正在我身边发生
码??看起来它发生在libgnustl_shared.so中.
所以这是我的堆栈跟踪:
基于阅读androID-ndk-r7b /我试过这个更好地理解它
文档/ NDK-STACK.HTML
所以,我不知道现在该做什么.我没有创造
libgnustl_shared.so,它只是ndk的一部分.在此之前,
我加载了一些其他共享库.加载时发生这种情况
最后一个依赖于其他共享库的库
在我首先加载的libgnustl_shared.so上.
还需要哪些其他信息来正确调试此问题?
为了更好地描述我的项目,我有6个共享库
加载.
第一个是libgnustl_shared.so,它加载正常.
接下来是libpcre.so.这是一个预建的共享库.它加载
精细.这是它的readelf:
接下来是libsharedA.so.这是一个预建的共享库.它加载
精细.这是它的readelf:
接下来是libsharedB.so.这是一个预建的共享库.它加载
精细.这是它的readelf:
接下来是libsharedC.so.这是一个预建的共享库.它失败
用前面描述的SEGV加载.这是readelf来自
它:
我没有加载第6个共享库,但那就是那个
我在顶部创建,依赖于这些预建共享
库.
当我尝试David’s suggestion时:
我看到一个有趣的libpcre,但它是依赖于它的libsharedB,他最终装得很好.但是,我没有得到任何更多的信息,它实际上是通过libsharedC上的SEGV崩溃的.
请告诉我调试需要哪些其他信息.我卡住了,但是
这对我很重要,可以提供所需的任何信息
更好地理解失败.
我也转而使用我的库的静态版本并到达完全相同的位置.
Another update:
如果我使用基于静态跟踪的addr2line,我得到以下内容:
我正在加载的lib是开源的(所以我有源代码),我如何找出这个问题的起源?
解决方法 我调试这种废话的方法是创建一个小的帮助程序库,它调用dlopen()并报告任何错误. C代码很长,但几乎都是样板:然后我创建一个java类com.cowlark.androID.Utils,如下所示:
现在这一切都完成了,我可以将以下代码插入到我的实际应用程序类中:
如果libdodgy.so无法加载,我实际上得到一个实际上提供信息的错误消息.
这个伎俩过去给我节省了这么多时间.
总结以上是内存溢出为你收集整理的需要帮助调试共享库无法加载的原因. Android NDK全部内容,希望文章能够帮你解决需要帮助调试共享库无法加载的原因. Android NDK所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)