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

标签 android android-ndk crash java-native-interface android-ndk-r7

我想通过 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/

相关文章:

可以在 NDK c 应用程序中调用在内核驱动程序中定义的函数吗?

java - 如何在 JNI 中将 C 结构来回传递给 Java 代码?

android - 无法在 Windows 上使用 Android Studio 1.3.2 调试 NDK 示例

crash - 如何在 Windbg 中找到应用程序崩溃的根本原因?

android - 当其他应用程序启动时手电筒关闭。安卓

android - 如何在 Android 中捕获调制解调器 radio 日志

java - Eclipse - 强制刷新 ID

android - 在android中绘制单点触摸运动路径

ios - Facebook 登录在冷启动时崩溃

php - Yii 1.14 通知未定义偏移 : 0 in CUrlManager. php