我已经(随Gradle一起)提供了一些带有本机库(DLL)的JAR,这些库与DLL文件上方的lib
子目录一起包装:
不幸的是
System.loadLibrary('JCudaRuntime-0.9.2-windows-x86_64');
原因
java.lang.UnsatisfiedLinkError: no JCudaRuntime-0.9.2-windows-x86_64 in java.library.path
如何解决此问题?
是否可以为loadLibrary
指定子目录?本地图书馆应该在哪里更好地定位?只是在JAR文件的根目录中?
我可以教Gradle在JAR中的lib
下寻找本地人吗?
答案 0 :(得分:1)
libs
目录普通用于jar
和aar
库。
x86_64
程序集将转到src/main/jniLibs/x86_64
static {
try {
System.loadLibrary("JCudaDriver-0.9.2-windows-x86_64");
System.loadLibrary("JCudaRuntime-0.9.2-windows-x86_64");
} catch (UnsatisfiedLinkError e) {
Log.e(LOG_TAG, e.getMessage());
}
}
一个人也可以/也可以改变路径:
sourceSets {
main {
jniLibs.srcDir "src/main/jniLibs"
jni.srcDirs = "src/main/cpp"
}
}
问题仅在于,x86_64
特定于平台的子目录仍会存在。从.dll
中提取.jar
并将其拖放到项目的jniLibs
目录中可能是最简单的-因为当它们位于jar
中且带有lib
时目录中,可能找不到它们;不必要地使事情复杂化。