在Android中使用javacpp + openblas

时间:2017-03-26 21:43:01

标签: android openblas javacpp

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

我的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)
      ...

我错过了一些依赖项?

1 个答案:

答案 0 :(得分:0)

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

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

但是,如果我在Android Studio中简单地创建您的项目,我会收到链接器错误:hi。这是因为Android未在运行时找到'e/linker: library "/system/lib/libdl.so"'

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

也许 - Android无法在abiFilters: 'armeabi-v7a'内找到静态库?