1

我正在尝试将 javacpp 的 openblas 预设集成到我的 Android 应用程序中。我创建了一个测试应用程序来说明我在Github中的问题。该应用程序只需在MainActivity.onCreate()方法中运行来自https://github.com/bytedeco/javacpp-presets/tree/master/openblas的示例代码。

我的 gradle 构建依赖项如下:

compile 'org.bytedeco:javacpp:1.3.2'
compile 'org.bytedeco.javacpp-presets:openblas:0.2.19-1.3'
compile group: 'org.bytedeco.javacpp-presets', name: 'openblas', version: '0.2.19-1.3', classifier: 'android-x86'
compile group: 'org.bytedeco.javacpp-presets', name: 'openblas', version: '0.2.19-1.3', classifier: 'android-arm'

当我在模拟器中运行应用程序时,我得到:

     java.lang.UnsatisfiedLinkError: No implementation found for int org.bytedeco.javacpp.openblas.LAPACKE_dgels(int, byte, int, int, int, double[], int, double[], int) (tried Java_org_bytedeco_javacpp_openblas_LAPACKE_1dgels and Java_org_bytedeco_javacpp_openblas_LAPACKE_1dgels__IBIII_3DI_3DI)
      at org.bytedeco.javacpp.openblas.LAPACKE_dgels(Native Method)
      at org.androidopenblas.ExampleDGELSrowmajor.runExample(MainActivity.java:80)
      at org.androidopenblas.MainActivity.onCreate(MainActivity.java:19)
      ...

我是否缺少一些依赖项?

4

1 回答 1

0

我对Maven的做事方式不太熟悉,无法重现错误。

该错误表明 Android 尝试查找未链接的 JNI 导出的 c++ 函数。

但是,如果我在 Android Studio 中简单地创建您的项目,则会出现链接器错误:'e/linker: library "/system/lib/libdl.so"'. 这是由于 Androidjniopenblas.so在运行时没有定位。

如果我提取libjniopenblas.solibopenblas.so明确地将它们放入app/main/jniLibs/armeabi-v7a/(创建目录)并将指定添加abiFilters: 'armeabi-v7a'到 [app]build.gradle,则错误解决并且项目编译并运行。

所以也许 - Android 无法找到里面的静态库openblas-android-arm.jar

于 2017-05-22T15:04:23.027 回答