我使用android-ndk-r10e构建了so文件,并将so文件从服务器下载到/data/data/packagename.for.myapplication/myownso/armeabi-v7a/libtest.so。
在加载lib之前,我检查了文件md5:
checkSoFileMD5();
System.load("/data/data/packagename.for.myapplication/myownso/armeabi-v7a/libtest.so");
大部分时间都可以正常工作。 但是,我从用户那里收到一些关于" java.lang.UnsatisfiedLinkError" 的错误日志。
它们是:
1. java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1934]: 107 missing essential tables
2. java.lang.UnsatisfiedLinkError: Cannot load library: get_lib_extents[845]: 574 - /data/data/packagename.for.myapplication/myownso/armeabi-v7a/libtest.so is not a valid ELF object
3. java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/packagename.for.myapplication/myownso/armeabi-v7a/libtest.so" is too small to be an ELF executable
4. java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH in "libtest.so" (built with --hash-style=gnu?)
5. java.lang.UnsatisfiedLinkError: dlopen failed: invalid ELF file "/data/data/packagename.for.myapplication/myownso/armeabi-v7a/libtest.so" load segment[2]: p_offset (0x0) + p_filesz (0xd3ba58) ( = 0xd3ba58) past end of file (0x3a0000)
我可以确认崩溃设备CPU_ABI是armeabi-v7a。
他们为什么会这样?为什么这些错误发生在很少的设备上?