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

时间:2015-09-14 21:06:15

标签: java windows gdal unsatisfiedlinkerror

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

我正在使用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,但这并没有改变我得到的错误。

2 个答案:

答案 0 :(得分:0)

我发现这篇文章/帖子: http://sandbox.idre.ucla.edu/sandbox/tutorial/installing-gdal-for-windows

它谈到了为Windows设置GDAL,并且比我拥有的包含和引用的蜘蛛网更直接。

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

然后我只添加了ClassPath上gdal/bin/gdal/java/gdal.jar的链接和Path上gdal/dll目录的链接。那就是......这就是你需要做的所有......

有关GDAL_DATAGDAL_DRIVERS的帖子中有提及,我不需要这些,但你可以添加它们以保证安全。

<强>更新 需要GDAL_DATA,只需参考gdal/bin/gdal_data iirc

我只能推断Eclipse不使用类路径,因此我在ClassPath上添加的额外引用只是让人感到困惑。

答案 1 :(得分:0)

我从

下载了二进制文件
  

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

由于二进制文件是使用 MSVC 2017 x64 构建的,因此我必须安装

  

Microsoft Visual C ++ 2017可重新分发

在Windows计算机上解决java.lang.UnsatisfiedLinkError

我的较老Gdal Version 2.4.0与已经存在的Microsoft Visual C++ 2010 Redistributeable