Android NDK构建的库在设备上很受欢迎,但在模拟器中运行良好



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

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

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

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

谢谢你的帮助!

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

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

Logcat:"java.lang.UnsisfiedLinkError…dlopen失败…libxyz.so有文本重定位">

更新到更新的NDK(9(修复了TEXTREL错误。现在System.loadLibrary和调用本机方法可以在较新的API上工作。所以我不得不安装1.4 GB的NDK来计算标准c.中的内容

最新更新