gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:39:26 25 4
gpt4 key购买 nike

我(使用 Gradle)包含了一些带有 native 库 (DLL) 的 JAR,这些 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 在 JAR 内的 lib 下查找 native 吗?

最佳答案

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 目录中可能是最简单的 - 因为当它们位于 jarlib 目录,它们可能无法在预期的位置找到;这使事情变得不必要地复杂化。

关于java - 如何从JAR文件的 `lib`子目录加载DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53034928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com