zoukankan      html  css  js  c++  java
  • dlopen failed: empty/missing DT_HASH in "libx.so" (built with --hash-style=gnu?)

    崩溃日志内容:
    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",
    ……
    }

    解决方式:
    http://stackoverflow.com/questions/28638809/android-ndk-unsatisfiedlinkerror-dlopen-failed-empty-missing-dt-hash

    The library you are trying to load was most likely built with Wl,hash-style=gnu. This was not supported on Android until recently (afaik this isn't even in L). You need to build your libraries with -Wl,-hash-style=sysv.

    How did you build cpplibrary.so? If you didn't do anything to manually switch to the gnu hash style, it could be a bug in the NDK.

    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 -d libxxxx.so
    Dynamic section at offset 0xed14 contains 27 entries:
    Tag Type Name/Value
    0x00000003 (PLTGOT) 0xfee0
    0x00000002 (PLTRELSZ) 552 (bytes)
    0x00000017 (JMPREL) 0x46fc
    0x00000014 (PLTREL) REL
    0x00000011 (REL) 0x39c4
    0x00000012 (RELSZ) 3384 (bytes)
    0x00000013 (RELENT) 8 (bytes)
    0x6ffffffa (RELCOUNT) 420
    0x00000006 (SYMTAB) 0x148
    0x0000000b (SYMENT) 16 (bytes)
    0x00000005 (STRTAB) 0x1918
    0x0000000a (STRSZ) 5780 (bytes)
    0x00000004 (HASH) 0x2fac
    0x00000001 (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) 0xf590
    0x0000001c (FINI_ARRAYSZ) 8 (bytes)
    0x00000019 (INIT_ARRAY) 0xf598
    0x0000001b (INIT_ARRAYSZ) 16 (bytes)
    0x00000010 (SYMBOLIC) 0x0
    0x0000001e (FLAGS) SYMBOLIC BIND_NOW
    0x6ffffffb (FLAGS_1) Flags: NOW
    0x00000000 (NULL) 0x0

    readelf.exe -d libxxxx.so
    Dynamic section at offset 0xed14 contains 27 entries:
    Tag Type Name/Value
    0x00000003 (PLTGOT) 0xfee0
    0x00000002 (PLTRELSZ) 552 (bytes)
    0x00000017 (JMPREL) 0x46fc
    0x00000014 (PLTREL) REL
    0x00000011 (REL) 0x39c4
    0x00000012 (RELSZ) 3384 (bytes)
    0x00000013 (RELENT) 8 (bytes)
    0x6ffffffa (RELCOUNT) 420
    0x00000006 (SYMTAB) 0x148
    0x0000000b (SYMENT) 16 (bytes)
    0x00000005 (STRTAB) 0x1918
    0x0000000a (STRSZ) 5780 (bytes)
    0x00000004 (HASH) 0x2fac
    0x00000001 (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) 0xf590
    0x0000001c (FINI_ARRAYSZ) 8 (bytes)
    0x00000019 (INIT_ARRAY) 0xf598
    0x0000001b (INIT_ARRAYSZ) 16 (bytes)
    0x00000010 (SYMBOLIC) 0x0
    0x0000001e (FLAGS) SYMBOLIC BIND_NOW
    0x6ffffffb (FLAGS_1) Flags: NOW
    0x00000000 (NULL) 0x0
    改动前后的节并没有什么变化。然并卵啊!



  • 相关阅读:
    zoj 3627#模拟#枚举
    Codeforces 432D Prefixes and Suffixes kmp
    hdu 4778 Gems Fight! 状压dp
    CodeForces 379D 暴力 枚举
    HDU 4022 stl multiset
    手动转一下田神的2048
    【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律
    poj 3254 状压dp
    C++中运算符的优先级
    内存中的数据对齐
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6922784.html
Copyright © 2011-2022 走看看