由 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 的所有目录添加到 CLASSPATH
和 PATH
环境中。
我认为它可能是库,但我使用的是路径中的部署位置,它在 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_DATA
和 GDAL_DRIVERS
,我不需要这些,但为了安全起见,您可以添加它们。
更新
需要GDAL_DATA
,参考gdal/bin/gdal_data
iirc
我只能推断 Eclipse 不使用类路径,所以我对类路径的额外引用只是令人困惑的事情。
我从
下载了二进制文件
由于二进制文件是 build 和 MSVC 2017 x64 我必须安装
Microsoft Visual C++ 2017 Redistributeable
在我的Windows机器上解决java.lang.UnsatisfiedLinkError
。
我的老 Gdal Version 2.4.0
与现有的 Microsoft Visual C++ 2010 Redistributeable
一起工作
我正在 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 的所有目录添加到 CLASSPATH
和 PATH
环境中。
我认为它可能是库,但我使用的是路径中的部署位置,它在 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_DATA
和 GDAL_DRIVERS
,我不需要这些,但为了安全起见,您可以添加它们。
更新
需要GDAL_DATA
,参考gdal/bin/gdal_data
iirc
我只能推断 Eclipse 不使用类路径,所以我对类路径的额外引用只是令人困惑的事情。
我从
下载了二进制文件由于二进制文件是 build 和 MSVC 2017 x64 我必须安装
Microsoft Visual C++ 2017 Redistributeable
在我的Windows机器上解决java.lang.UnsatisfiedLinkError
。
我的老 Gdal Version 2.4.0
与现有的 Microsoft Visual C++ 2010 Redistributeable