由 org.gdal.ogr.ogrJNI.GetDriverCount() 引起的 UnsatisfiedLinkError

UnsatisfiedLinkError caused by org.gdal.ogr.ogrJNI.GetDriverCount()

我正在 Java 在 Windows 7 上使用 Eclipse (Luna) 进行开发。

我正在将 gdal 用于某些 ogr 进程,运行 来自 eclipse 的应用程序很好,但是来自同一台机器上命令行的 运行 运行 出现问题。

我得到以下信息:

Caused by: java.lang.UnsatisfiedLinkError: org.gdal.ogr.ogrJNI.GetDriverCount()I
    at org.gdal.ogr.ogrJNI.GetDriverCount(Native Method)
    at org.gdal.ogr.ogr.GetDriverCount(ogr.java:170)

我已将 gdal 下包含 dll 和 jar 的所有目录添加到 CLASSPATHPATH 环境中。

我认为它可能是库,但我使用的是路径中的部署位置,它在 eclipse 中有效。

在 eclipse 项目的 .classpath 文件中,我注意到 gdal 引用有一个名为 CLASSPATH_ATTR_LIBRARY_PATH_ENTRY 的属性,它链接到 gdal\dll 目录,但我已经将其包含在路径:

<classpathentry exported="true" kind="lib" path="dependencies/gdal/bin/gdal/java/gdal.jar">
    <attributes>
        <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="dependencies/gdal/dll"/>
    </attributes>
</classpathentry>

这是我能看到的唯一区别。您如何在 windows 机器上复制它,或者是由 CLASSPATH 和 PATH 处理的?

我需要引用各个 dll 吗?我已经尝试了通常与 gdal.jar 一起使用的 4,但这并没有改变我得到的错误。

我找到了这篇文章/Post: http://sandbox.idre.ucla.edu/sandbox/tutorial/installing-gdal-for-windows

它讨论了为 windows 设置 GDAL 并且比我拥有的包含和参考的蜘蛛网更直接。

我从 ClassPath 和 Path 中删除了所有对 gdal 的引用。

然后我只将 link 添加到 ClassPath 上的 gdal/bin/gdal/java/gdal.jar 和 link 到路径上的 gdal/dll 目录。就是这样......这就是你需要做的......

post 中提到了 GDAL_DATAGDAL_DRIVERS,我不需要这些,但为了安全起见,您可以添加它们。

更新 需要GDAL_DATA,参考gdal/bin/gdal_data iirc

我只能推断 Eclipse 不使用类路径,所以我对类路径的额外引用只是令人困惑的事情。

我从

下载了二进制文件

https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

由于二进制文件是 buildMSVC 2017 x64 我必须安装

Microsoft Visual C++ 2017 Redistributeable

在我的Windows机器上解决java.lang.UnsatisfiedLinkError

我的老 Gdal Version 2.4.0 与现有的 Microsoft Visual C++ 2010 Redistributeable

一起工作