VTK/Java 由于链接器错误,IntelliJ 中的包装器将无法工作(找不到依赖库)

VTK/Java Wrapper in IntelliJ won't work because of linker errors (Can't find dependent libraries)

Im 运行ning Java 1.8.0_065(64 位)在 Windows10(64 位)上。我已经为 windows 下载了最新的 cmake 版本 (3.4.0-rc2) 和最新的 VTK 源代码 (6.3.0)。我通过 cmake 生成了一个 VS2015 解决方案,并使用本教程成功设置了所有内容(貌似!!):

https://www.particleincell.com/2011/vtk-java-visualization/

当我尝试 运行 本教程提供的 DemoJavaVTK.java 时,我在 IntelliJ 中遇到链接器错误。 (14.1.5) 显然每个必须加载的 VTK 库都存在相同的错误:

java.lang.UnsatisfiedLinkError: C:\Program Files\VTK\bin\ANY_VTK_DLL.dll: Can't find dependent libraries at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1938) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at vtk.vtkNativeLibrary.LoadLibrary(vtkNativeLibrary.java:223) at vtk.vtkNativeLibrary.LoadAllNativeLibraries(vtkNativeLibrary.java:158) at sample.DemoJavaVTK.(DemoJavaVTK.java:54) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)

请注意,ANY_VTK_DLL 只是一个占位符。具体示例为:vtkViewsContext2DJava.dll 或 vtkRenderingVolumeOpenGLJava.dll.

路径应该是正确的。所有 "versions" 都是 64 位的。我为 64 位编译了 VTK。我正在 运行宁 64 位 OS 与 64 位 java。

最奇怪的是:使用 eclipse 一切正常,我可以 运行 VTK 演示,没有任何问题。此外,我在我大学的一门课程中使用 VTK,我正在与一位具有相同 java 和 intellij 版本的同事一起从事我的项目。他还使用相同的教程来设置 VTK/Java。该示例在 IntelliJ 中也适用于他。我能说出他和我的系统之间的唯一区别是,他使用的是 Windows 8.1 而我使用的是 windows 10.

我真的不知道从哪里继续。什么是 IntelliJs 问题?

更新:

UnsatisfiedLinkError 表示 Java 虚拟机 (JVM) 无法找到声明为 本土。具体来说,为了找到所需的本机库,JVM 在 PATH 环境变量和 java.library.path 系统 属性. 中查找(来自 this article

我以前遇到这种问题主要是因为两个原因:

  1. 无法找到本机库(即不存在)
  2. 链接的库不相同(调试与发布,32 位 与 64 位、VC10 与 VC9 等)
  3. 该库已被您的应用程序加载,应用程序尝试再次加载它
  4. 本机库存在于 java.library.path 或应用程序的 PATH 环境库中

为了确定您要链接到谁的库,请使用 Dependency Walker。使用此工具可以告诉您链接到哪些本机库,从而让您了解问题所在。

下载该工具,然后打开 C:\Program Files\VTK\bin\ANY_VTK_DLL.dll 查看它链接到哪个库以及它们在您机器中的位置。然后确保 IntelliJ 可以找到这些路径。

这里有一个关于如何使用这个工具的好教程:http://www-archive.mozilla.org/quality/help/dependency-walker.html

如果它们是正确的,请验证 IntelliJ Idea 用于启动您的应用程序的 class 路径以检查本地库是否存在。

通过 运行-configurations 手动设置 JRE,完全随机地修复了它:

http://puu.sh/l3315/7c1d5e3393.png

为什么这行得通?

我是 VTK 的新手,我花了一些时间来解决这个问题,我正在使用 eclipse,

我在PATH环境变量中添加了dll文件夹和lib文件夹

我可以 运行 使用, System.setProperty("vtk.lib.dir", YourBuildVTKLibPath);