M1 mac 编译java gdal 3.0.4和3.6.3到指定目录

目录

  • 3.0.4
    • 说明
    • 设置环境变量以便能找到gdal依赖的库
    • 编译gdal
    • 编译java
    • 代码测试
    • 问题记录
  • 3.6.3
    • 环境
    • 安装步骤
    • java
    • 其他
  • 参考文档

此文档记录在mac上安装gdal到指定目录,3.0.4使用make构建,3.6.3使用cmake构建。

3.0.4

说明

机器环境:m1 pro芯片macos 12。

java环境:zulu jdk 8,通过dmg安装。

软件环境:因为之前通过homebrew安装过postgis,所以本机已经有gdal了,最大的好处是gdal依赖的所有软件包都已齐备,否则的话,在编译gdal的时候缺什么依赖就用brew去安装就好了。

设置环境变量以便能找到gdal依赖的库

因为编译gdal时所依赖的库都是用homebrew安装的,所以通过临时设置这三个路径来让配置通过(./configure)。

export CPLUS_INCLUDE_PATH=/opt/homebrew/include
export C_INCLUDE_PATH=/opt/homebrew/include
export LIBRARY_PATH=/opt/homebrew/lib

编译gdal

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

编译java

1、编译java需要用到两个工具:swigant

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通过,后续基本没啥问题。

3.6.3

环境

gdal从3.5.0开始,推荐使用cmake构建,且3.6.0开始只能用cmake构建了。使用homebrew安装cmake,cmake可以找到所有用homebrew安装的依赖。

安装步骤

  1. 下载源码
  2. 执行命令
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
  • -j4多核编译
  • -DCMAKE_INSTALL_RPATH指定rpath路径

java

  1. 动态链接库文件位于安装目录:/Users/xxx/main/software/gdal-3.6.3/share/java/libgdalalljni.dylib

  2. 拷贝libgdalalljni.dylib至目录/Library/Java/Extensions

其他

  1. 关于版本切换,只需要将不同版本的动态链接库文件拷贝至/Library/Java/Extensions目录即可。同时pom文件里引用相应版本的jar包依赖。
  2. 关于OpenFileGDBFileGDB驱动。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

你可能感兴趣的:(java,macos,arm)