HASH in libx.so (built with

崩溃日志内容:

java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH in "libxxxx.so" (built with –hash-style=gnu?)

at java.lang.Runtime.loadLibrary(Runtime.java:371)

at java.lang.System.loadLibrary(System.java:989)

崩溃设备信息:

{

"STARTTIME": "1970-01-01 08:00:00",

"CRASHTIME": "2015-08-14 01:47:28",

"DEVICEID": "6aa3a6d0cbcb3251",

"DEVICE": "hlte",

"FINGERPRINT": "samsung/h3gduosctc/hlte:5.0/LRX21V/N9009KEU2GOF1:user/release-keys",

"MODEL": "SM-N9009",

"OSVERSION": "5.0",

"CPU_ABI": "armeabi-v7a",

"IMEI": "A00000443A46BD",

"CPU_ABI2": "armeabi",

……

}

解决方案:ThelibraryyouaretryingtoloadwasmostlikelybuiltwithWl,hash-style=gnu.ThiswasnotsupportedonAndroiduntilrecently(afaikthisisn’teveninL).Youneedtobuildyourlibrarieswith-Wl,-hash-style=sysv.Howdidyoubuildcpplibrary.so?Ifyoudidn’tdoanythingtomanuallyswitchtothegnuhashstyle,itcouldbeabugintheNDK.

One option is to add "LOCAL_LDFLAGS := -Wl,–hash-style=sysv" at screenrecord Android.mk though I am sure there is a less hacky method of doing so..

总结了一下是需要在Android.mk中添加链接选项:

LOCAL_LDFLAGS := Wl,-hash-style=sysv

libsysv-hash-table-library_ldflags := Wl,-hash-style=sysv

于是在修改前后查看了一下so节的变化:

readelf.exe -dlibxxxx.so

Dynamic section at offset 0xed14 contains 27 entries:Tag Type Name/Value0x00000003 (PLTGOT) 0xfee00x00000002 (PLTRELSZ) 552 (bytes)0x00000017 (JMPREL) 0x46fc0x00000014 (PLTREL) REL0x00000011 (REL) 0x39c40x00000012 (RELSZ) 3384 (bytes)0x00000013 (RELENT) 8 (bytes)(SYMENT) 16 (bytes)0x00000005 (STRTAB) 0x19180x0000000a (STRSZ) 5780 (bytes)0x00000004 (HASH) 0x2fac0x00000001 (NEEDED) Shared library: [liblog.so]0x00000001 (NEEDED) Shared library: [libdl.so]0x00000001 (NEEDED) Shared library: [libstdc++.so]0x00000001 (NEEDED) Shared library: [libm.so]0x00000001 (NEEDED) Shared library: [libc.so]0x0000000e (SONAME) Library soname: [libbugrpt.so]0x0000001a (FINI_ARRAY) 0xf5900x0000001c (FINI_ARRAYSZ) 8 (bytes)0x00000019 (INIT_ARRAY) 0xf5980x0000001b (INIT_ARRAYSZ) 16 (bytes)0x00000010 (SYMBOLIC) 0x00x0000001e (FLAGS) SYMBOLIC BIND_NOW0x6ffffffb (FLAGS_1) Flags: NOW0x00000000 (NULL) 0x0

readelf.exe -dlibxxxx.so

Dynamic section at offset 0xed14 contains 27 entries:Tag Type Name/Value0x00000003 (PLTGOT) 0xfee00x00000002 (PLTRELSZ) 552 (bytes)0x00000017 (JMPREL) 0x46fc0x00000014 (PLTREL) REL0x00000011 (REL) 0x39c40x00000012 (RELSZ) 3384 (bytes)0x00000013 (RELENT) 8 (bytes)(SYMENT) 16 (bytes)0x00000005 (STRTAB) 0x19180x0000000a (STRSZ) 5780 (bytes)0x00000004 (HASH) 0x2fac0x00000001 (NEEDED) Shared library: [liblog.so]0x00000001 (NEEDED) Shared library: [libdl.so]0x00000001 (NEEDED) Shared library: [libstdc++.so]0x00000001 (NEEDED) Shared library: [libm.so]0x00000001 (NEEDED) Shared library: [libc.so]0x0000000e (SONAME) Library soname: [libbugrpt.so]0x0000001a (FINI_ARRAY) 0xf5900x0000001c (FINI_ARRAYSZ) 8 (bytes)0x00000019 (INIT_ARRAY) 0xf5980x0000001b (INIT_ARRAYSZ) 16 (bytes)0x00000010 (SYMBOLIC) 0x00x0000001e (FLAGS) SYMBOLIC BIND_NOW0x6ffffffb (FLAGS_1) Flags: NOW0x00000000 (NULL) 0x0

修改前后的节并没有什么变化,,然并卵啊!

版权声明:本文为博主原创文章,未经博主允许不得转载。

走自己的路,让别人说去吧

HASH in libx.so (built with

相关文章:

你感兴趣的文章:

标签云: