我有一个在Win7上使用GDAL绑定的Java项目。问题是,由于绑定的性质,它需要设置环境变量才能工作,特别是PATH、GDAL_DATA、GDAL_DRIVER_PATH和PROJ_LIB。我的意思是,它们很容易让我创建并指向GDAL目录。然而,如果我想发布这个,对于普通用户来说,这将是一个笨拙的步骤。
我需要一些方法来配置GDAL绑定,以便用户可以在任何地方复制程序,其中有jar和GDAL库,并且引导代码将自动设置GDAL以查找相对于其当前位置的那些变量。
现在,我尝试了以下方法(它使用了一个非常类似的问题中提出的解决方案的一部分:package GDAL JAVA Binding and native library in a SWT plugin):
// define `root` before to grab the path of the where the JAR is located
// bit of a hack-y way to set the classpath
System.setProperty("java.library.path", root+"gdal");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
// set these gdal config variables programatically
gdal.SetConfigOption("GDAL", root + "gdal");
gdal.SetConfigOption("GDAL_DATA", root + "gdal\\gdal_data");
gdal.SetConfigOption("GDAL_DRIVER_PATH", root + "gdal\\gdalplugins");
gdal.SetConfigOption("PROJ_LIB", root + "gdal\\proj_lib");但是,它在第一个SetConfigOption()中失败,有以下错误:
Native library load failed.
java.lang.UnsatisfiedLinkError: C:\...\gdal\gdaljni.dll: Can't find dependent libraries这意味着至少第一部分正在工作,因为它正确地定位了gdaljni.dll,但似乎在SetConfigOption()能够完成它的工作之前,它已经在尝试查看这些路径,只是为了初始化和失败。
现在,如果我手动设置环境变量,显然,它运行良好。
来自:http://www.gisinternals.com/的GDAL绑定
发布于 2015-11-16 00:01:16
我很抱歉没有给出一个特定于Windows的答案,但是这里类似Unix的系统和Windows系统之间的概念基本上是一样的。您正在发生的错误是由于库路径(在Windows中,仍然是二进制dll)不是所需路径的一部分。GDAL配置设置不管理到DLL的路由,而是管理到内部数据的位置。
这可能不是最好的解决办法,但这在过去对我来说是非常有效的。关键是创建一个脚本来更新启动应用程序所需的路径。
在剧本里你需要..。
SCRIPT_PATH作为路径的基础。DYLD_LIBRARY_PATH (Mac)、LD_LIBRARY_PATH (Linux),如果我还记得,更新PATH (PATH)。这里有一个例子,我没有在我的Mac上以clang设置rpath。
- bin/foo
- lib/libtest.dylib
- run.sh
运行脚本
#!/bin/sh
# Get the directory of this script being run
SCRIPT_PATH="`dirname ${BASH_SOURCE[0]}`"
# Export the Path
export DYLD_LIBRARY_PATH=$SCRIPT_PATH/lib:$DYLD_LIBRARY_PATH
# Run the executable
$SCRIPT_PATH/bin/foohttps://stackoverflow.com/questions/33680030
复制相似问题