我正在尝试将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)
...我是否遗漏了一些依赖项?
发布于 2017-05-22 23:04:23
我不太熟悉Maven的处理方式,无法重现错误。
该错误表明Android试图定位未链接的JNI导出的c++函数。
但是如果我在Android Studio中简单地创建你的项目,我会得到一个链接器错误:'e/linker: library "/system/lib/libdl.so"'。这是因为安卓在运行时没有定位到jniopenblas.so。
如果我提取libjniopenblas.so和libopenblas.so并显式地将它们放在app/main/jniLibs/armeabi-v7a/中(创建了目录),并将指定的abiFilters: 'armeabi-v7a'添加到appbuild.gradle中,错误就会解决,项目会编译并运行。
因此,也许-安卓无法在openblas-android-arm.jar中定位静态库
https://stackoverflow.com/questions/43034915
复制相似问题