2

当我试图加载一个仅为 armeabi 编译的库时,我在 logcat 中得到了这个(假设它是所有 arm* abis 的后备)。

    08-14 09:43:51.516    7486-7486/package_name E/art﹕ dlopen("/data/app/package_name-1/lib/arm/libLibrary.so", RTLD_LAZY) failed: dlopen failed: unknown reloc type 160 @ 0xa3725ab4 (82108)

由于实际限制,我无法在有根设备上进行测试,所以我只知道该/data/data/package_name文件夹有一个符号链接lib -> /data/app/package_name-1/lib/arm

我知道这不是特定于设备的问题,因为我之前在同一设备上使用过本机库(使用不同的应用程序,但之前的架构相同)。

有人可以帮我吗?真的很困惑到底发生了什么。

我使用 gradle build (Android Studio),解压时 libLibrary.so 出现在lib/armeabiapk 的文件夹中。

4

1 回答 1

1

这个问题只是部分正确。真正的问题在于重定位类型(我最初不知道)。

当加载器和目标文件不理解相同的格式时,通常会发生重定位错误。

在这种情况下,.so 文件是用c++_static而不是 .so 构建的gnustl_static。Android/NDK 提供了大部分c++11功能,但其中一些功能并不完全可操作/功能std::to_string,这让我尝试了c++_static.

希望这可以帮助其他仍然留有头发的人。

于 2015-08-15T01:53:05.760 回答