我正在尝试为我正在处理的项目设置 mavenized JCUDA,并且遇到了告诉 java 在哪里找到库文件的问题。
设置并让 maven 构建.jar
和.dll
文件运行良好,我可以在其中看到正确命名的.dll
文件,project\target\lib
并且我将本机库位置设置为此文件夹。
尝试从 JCUDA JCublasSample.java (www.jcuda.org/samples/JCublasSample.java) 运行其中一个程序时出现的错误是:
创建输入数据... 使用 Java 执行 Sgemm... 使用 JCublas 执行 Sgemm...
线程“主”java.lang.UnsatisfiedLinkError 中的异常:无法加载本机库。
使用基本名称“JCublas”加载本机库“JCublas-windows-x86_64”时出错操作系统名称:Windows 7 体系结构:amd64 体系结构位大小:64
尝试将库作为资源加载的堆栈跟踪:java.lang.NullPointerException:找不到名称为“/lib/JCublas-windows-x86_64.dll”的资源
在 jcuda.LibUtils.loadLibraryResource(LibUtils.java:149) 在 jcuda.LibUtils.loadLibrary(LibUtils.java:83) 在 jcuda.jcublas.JCublas.initialize(JCublas.java:93) 在 jcuda.jcublas.JCublas.(JCublas .java:81) 在 JCublasSample.sgemmJCublas(JCublasSample.java:64) 在 JCublasSample.testSgemm(JCublasSample.java:49) 在 JCublasSample.main(JCublasSample.java:25)
尝试将库加载为文件的堆栈跟踪:java.lang.UnsatisfiedLinkError: C:\Users\kristoffer.bernhem\git\SMlocalizer\target\lib\JCublas-windows-x86_64.dll: 找不到依赖库
在 java.lang.ClassLoader$NativeLibrary.load(Native Method) 在 java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 在 java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) 在 java.lang.Runtime .loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at jcuda.LibUtils.loadLibrary(LibUtils.java:94) at jcuda.jcublas.JCublas.initialize(JCublas.java: 93) 在 jcuda.jcublas.JCublas.(JCublas.java:81) 在 JCublasSample.sgemmJCublas(JCublasSample.java:64) 在 JCublasSample.testSgemm(JCublasSample.java:49) 在 JCublasSample.main(JCublasSample.java:25) 在jcuda.LibUtils.loadLibrary(LibUtils.java:128) 在 jcuda.jcublas.JCublas.initialize(JCublas.java:93) 在 jcuda.jcublas.JCublas.(JCublas.java:81) 在 JCublasSample.sgemmJCublas(JCublasSample.java:64) 在 JCublasSample.testSgemm(JCublasSample.java:49) 在 JCublasSample.main(JCublasSample.java:25)
正如 Guenther 所解释的,问题在于.dll
缺少支持文件。我将如何解决这个错误?
这是在 Windows 7(64 位)中运行并使用 JDK1.8.0_91 运行。