0

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

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

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

我的库二进制文件可以不兼容吗?

谢谢你的帮助!

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

4

1 回答 1

-1

最后我可以从设备读取 logcat(通过命令行 adb,在 Eclipse 中这不起作用)。该问题似乎是由二进制文件中的“文本重定位”引起的。

Logcat:“java.lang.UnsatisfiedLinkError ... dlopen 失败 ... libxyz.so 有文本重定位”

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

于 2020-05-05T22:04:42.520 回答