GeoTools / GDAL:警告:无法加载kakadu本机库

时间:2012-03-21 21:40:07

标签: java-native-interface gis gdal geotools unsatisfiedlinkerror

我正在尝试使用GeoTools来读取一个dted文件,但我遇到了很多配置问题。我正在使用eclipse和java。这是我的代码的删节版本:

import org.geotools.coverageio.gdal.dted.DTEDReader;

public class ViewDTED {
public static void main(String[] args) {
try {
DTEDReader reader = new DTEDReader(new File("C:\\temp\\mydted.dt2"));
System.out.println("It worked!");
} catch (Exception e) {
e.printStackTrace();
}
}
}

当我运行时,控制台会发出一条消息“警告:无法加载Kakadu本机库”。然后它继续打印出一个UnsatisfiedLinkError的堆栈跟踪。

我的系统路径包括: C:_path C:\ Program Files \ gdal-1.9.0 C:\%JAVA_HOME%\ bin中 C:\ Program Files \ Common Files \ ESRI \ Raster \ bin \ ntx86

最后一个包含了很多dll,包括我在我的机器上发现的唯一一个名字中有kakadu的dll。

在C:_path我有这个:
gdal19.dll
gdaljni.dll
ogrjni.dll
osrjni.dll
gdalconstjni.dll
gdal.jar

这些文件也被复制到我的eclipse项目的根目录中。 我的eclipse构建路径包括gdal.jar和C:\ Program Files \ geotools-2.7.4中找到的每个jar

在我的eclipse项目的根目录中,我有这个:

gdal19.dll
gdaljni.dll
ogrjni.dll
osrjni.dll
gdalconstjni.dll
kakaducoresys.dll

哦是的,我定义了另一个环境变量:GDAL_DATA设置为“C:\ Program Files \ gdal-1.9.0”

请有人向我解释为什么DTEDReader无法找到必要的库?

1 个答案:

答案 0 :(得分:0)

检查以确保您没有尝试从64位JAVA实例调用32位DLL。

在试图让Djatoka与Fedora Commons合作时,我在Windows服务器上遇到了与Kakadu类似的问题。抛开路径问题,问题的根本原因是我试图在64位的Tomcat实例和64位版本的JAVA上从Djatoka加载免费的32位版本的Kakadu库。

JAVA JNI文件似乎对尝试与64/32位DLL(或共享对象)进行通信非常挑剔,因此使用重命名的32位文件伪造Kakadu的64位库结构将无法正常工作。

要解决此问题,我必须在同一台Windows服务器上安装Tomcat和JAVA的单独版本32位版本,以便64位版本的Fedora Commons可以通过Djatoka与32位版本的Kakadu通信