我正在尝试将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)
...
我错过了一些依赖项?
答案 0 :(得分:0)
我不太熟悉Maven的做事方式,也无法重现错误。
该错误表明Android尝试查找未链接的JNI导出的c ++函数。
但是,如果我在Android Studio中简单地创建您的项目,我会收到链接器错误:hi
。这是因为Android未在运行时找到'e/linker: library "/system/lib/libdl.so"'
。
如果我提取jniopenblas.so
和libjniopenblas.so
并明确将它们放入libopenblas.so
(创建目录)并将指定的app/main/jniLibs/armeabi-v7a/
添加到[app] build.gradle,错误解决,项目编译并运行。
也许 - Android无法在abiFilters: 'armeabi-v7a'
内找到静态库?