我想通过 native 代码进行 DSP 计算。这在模拟器(Android 4.2.2)中运行良好。但在一些设备(Android 7 和 9)上,由 NDK 构建的库让应用程序在执行 System.loadLibrary 时直接崩溃。 但是:当我将下载的库放入我的 APK 时,它会毫无问题地加载。
我承认,对于主要应用程序,我在 Windows 上使用旧的 Eclipse IDE,目标是 API 26。我的 NDK 是一个小型 r7,在 Ubuntu 上运行。但是我的库只对标准 c 中的字节数组进行计算,这里没有访问 Android 的东西。
native 代码编译时没有警告和错误,是为 armeabi 和 armeabi-v7a 构建的。在 APK 中,libxyz.so 文件位于正确的文件夹中。导出函数的名称应该是正确的。但是即使在 Java 类中没有声明它们并且没有调用任何 native,崩溃直接发生在 static { System.loadLibrary("libxyz.so"); }
上。
我的库二进制文件可以不兼容吗?
谢谢你的帮助!
更新:这些库确实不兼容,请参阅下面的评论。
最佳答案
最后我可以从设备读取 logcat(通过命令行 adb,在 Eclipse 中这不起作用)。该问题似乎是由 引起的“文本重定位”在二进制文件中。
Logcat:“java.lang.UnsatisfiedLinkError ... dlopen 失败 ... libxyz.so 有文本重定位”
更新到更新的 NDK (9) 修复了 TEXTREL 错误。现在 System.loadLibrary 和调用 native 方法适用于较新的 API。所以我必须安装 1.4 GB 的 NDK 来计算标准 c 中的东西。
关于Android NDK 构建库在设备上崩溃但在模拟器中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61442431/