有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从JAR文件的`lib`子目录加载DLL?

我(与Gradle一起)包含了一些带有本机库(DLL)的JAR,它们在DLL文件上方的lib子目录中打包:

enter image description here

不幸的是

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在罐子里寻找本地人吗


共 (1) 个答案

  1. # 1 楼答案

    libs普通目录用于jaraar

    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特定于平台的子目录仍然是预期的。从.jar中提取.dll并将它们放到项目的jniLibs目录中可能是最简单的-因为它们位于带有lib目录的jar中,但可能无法在预期的位置找到;这不必要地使事情复杂化了