此文档记录在mac上安装gdal到指定目录
,3.0.4使用make
构建,3.6.3使用cmake
构建。
机器环境:m1 pro芯片macos 12。
java环境:zulu jdk 8,通过dmg安装。
软件环境:因为之前通过homebrew安装过postgis,所以本机已经有gdal了,最大的好处是gdal依赖的所有软件包都已齐备,否则的话,在编译gdal的时候缺什么依赖就用brew去安装就好了。
因为编译gdal时所依赖的库都是用homebrew安装的,所以通过临时设置这三个路径来让配置通过(./configure)。
export CPLUS_INCLUDE_PATH=/opt/homebrew/include
export C_INCLUDE_PATH=/opt/homebrew/include
export LIBRARY_PATH=/opt/homebrew/lib
1、为了安装干净,不安装到类似/usr/local
这样的目录,所以本次安装到指定目录:/Users/xxx/main/software/gdal-3.0.4。以避免和原先的有冲突。这要求./configure和make install都要指定安装路径。
2、即便设置了环境变量,但配置时仍找不到libjson,所以手动指定其目录:–with-libjson-c=/opt/homebrew/Cellar/json-c/0.16。
3、因为这个gdal要用于java开发,因此需要指定:–without-python --with-java=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home。
4、make命令通过指定-j参数并行加快编译速度。
./configure --prefix=/Users/xxx/main/software/gdal-3.0.4 --with-threads --disable-static --without-grass --with-pcraster=internal --with-libjson-c=/opt/homebrew/Cellar/json-c/0.16 --with-opencl --with-libz=internal --without-python --with-java=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
make -j4
make install prefix=/Users/xxx/main/software/gdal-3.0.4
1、编译java需要用到两个工具:swig和ant。
brew install swig@3
echo 'export PATH="/opt/homebrew/opt/swig@3/bin:$PATH"' >> ~/.zshrc
brew install [email protected]
echo 'export PATH="/opt/homebrew/opt/[email protected]/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
2、进入swig/java目录。
cd swig/java
3、修改java.opt。
#
# Java Stuff
#JAVA_HOME = "C:\Program Files\Java\jdk1.6.0_16"
#JAVA_HOME = /usr/lib/jvm/java-6-openjdk/
#JAVA_HOME = /usr/lib/jvm/java-7-openjdk-amd64/
JAVA_HOME = /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
JAVADOC=$(JAVA_HOME)/bin/javadoc
JAVAC=$(JAVA_HOME)/bin/javac
JAVA=$(JAVA_HOME)/bin/java
JAR=$(JAVA_HOME)/bin/jar
JAVA_INCLUDE=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin
4、修改build.xml,将其中的java版本1.6修改为本机的1.8。
<target name="compile" depends="init" description="Compile the source files.">
<mkdir dir="build/classes"/>
<javac srcdir="org" destdir="build/classes"
debug="on" source="1.8" target="1.8"
includeantruntime="false" deprecation="true">
javac>
<echo>compilation completeecho>
target>
<target name="archive" depends="compile" description="Build a jar.">
<jar destfile="gdal.jar">
<fileset dir="build/classes">
<include name="**/*.class"/>
fileset>
jar>
target>
<target name="compile_tests" depends="archive" description="Compile the tests files.">
<mkdir dir="build/apps"/>
<javac srcdir="apps" destdir="build/apps"
debug="on" source="1.8" target="1.8"
includeantruntime="false" deprecation="true" classpath="gdal.jar">
javac>
<echo>compilation of tests completeecho>
target>
5、编译。
make
6、编译产生文件:libgdalalljni.dylib。将其移动至目录:/Library/Java/Extensions。
至此完毕。
添加maven:
<dependency>
<groupId>org.gdalgroupId>
<artifactId>gdalartifactId>
<version>3.0.0version>
dependency>
测试代码:
import org.gdal.gdal.gdal;
import org.gdal.ogr.ogr;
public class GdalTest {
public static void main(String[] args) {
gdal.AllRegister();
System.out.println(gdal.VersionInfo());
int count = ogr.GetDriverCount();
for (int i = 0; i < count; i++) {
String driverName = ogr.GetDriver(i).getName();
System.out.print(driverName + "\t");
}
gdal.GDALDestroyDriverManager();
}
}
1、主要问题出在./configure,只要./configure通过,后续基本没啥问题。
gdal从3.5.0开始,推荐使用cmake构建,且3.6.0开始只能用cmake构建了。使用homebrew安装cmake,cmake可以找到所有用homebrew安装的依赖。
cd gdal-{VERSION}
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/Users/xxx/main/software/gdal-3.6.3 -DCMAKE_INSTALL_RPATH=/Users/xxx/main/software/gdal-3.6.3/lib -DBUILD_PYTHON_BINDINGS=OFF ..
cmake --build . -- -j4
cmake --build . --target install
-DCMAKE_INSTALL_PREFIX
指定安装目录-DBUILD_PYTHON_BINDINGS=OFF
指定排除python
-DCMAKE_INSTALL_RPATH
指定rpath
路径动态链接库文件位于安装目录:/Users/xxx/main/software/gdal-3.6.3/share/java/libgdalalljni.dylib
拷贝libgdalalljni.dylib至目录/Library/Java/Extensions
OpenFileGDB
和FileGDB
驱动。gdal3.6之前,OpenFileGDB
只支持读操作,如果要进行写操作,需要编译时自行扩展FileGDB,但FileGDB
目前只支持x86
架构,因此在arm
芯片的机器上,gdal3.6之前的版本无法进行gdb
文件的创建和写入操作;gdal3.6之后,使用OpenFileGDB
就可以进行读写操作而不用依赖FileGDB
了:https://github.com/OSGeo/gdal/blob/v3.6.0/NEWS.md。https://gdal.org/development/building_from_source.html#
https://blog.51cto.com/theonegis/5531890
https://cloud.tencent.com/developer/article/1612274
https://blog.csdn.net/weixin_43955726/article/details/127110531
https://www.jianshu.com/p/1528e2d09c7a
https://chat.openai.com