• 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
    改动前后的节并没有什么变化。然并卵啊!



  • 相关阅读:
    获取当前时区时间
    python lambda表达式详解
    Odoo 12开发之开发环境准备
    初步了解odoo12
    web前端面试题
    实现一个优先级队列
    面试题
    python读取和生成excel文件
    Django基础
    virtualenv
  • 原文地址:https://www.cnblogs.com/twodog/p/12140416.html
Copyright © 2020-2023  润新知