Android NDK 构建库在设备上崩溃但在模拟器中运行良好

Android NDK built library crahes on devices but runs fine in emulator

我想通过本机代码进行 DSP 计算。这在模拟器 (Android 4.2.2) 中运行良好。但是在一些设备(Android 7 和 9)上,NDK 构建的库让应用程序在执行 System.loadLibrary 时直接崩溃。 但是: 当我将下载的库放入我的 APK 时,它可以正常加载。

我承认,对于主要应用程序,我在 Windows 上使用旧的 Eclipse IDE,目标是 API 26。我的 NDK 是一个小型 r7,运行 在 Ubuntu 上。但是我的lib只对标准c中的字节数组进行计算,这里没有Android东西被访问。

本机代码编译时没有警告和错误,并且是为 armeabi 和 armeabi-v7a 构建的。在 APK 中,libxyz.so 文件位于正确的文件夹中。导出函数的名称应该是正确的。但是即使在 Java class 中没有为它们声明并且没有调用任何 native,崩溃也会直接发生在 static { System.loadLibrary("libxyz.so"); }

我的 lib 二进制文件是否不兼容?

感谢您的帮助!

更新: 库确实不兼容,请参阅下面的评论。

我终于可以从设备读取 logcat(通过命令行 adb,在 Eclipse 中这是行不通的)。问题似乎是由二进制文件中的 "text relocations" 引起的。

Logcat: "java.lang.UnsatisfiedLinkError ... dlopen failed ... libxyz.so has text relocations"

更新到更新的 NDK (9) 修复了 TEXTREL 错误。现在 System.loadLibrary 并调用本机方法适用于较新的 API。所以我不得不安装 1.4 GB 的 NDK 来计算标准 c 中的东西。