Skip to content

Latest commit

 

History

History
409 lines (267 loc) · 14.3 KB

gdal_3_build.rst

File metadata and controls

409 lines (267 loc) · 14.3 KB

GDAL3编译

本篇适用于GDAL3.3的静态编译,环境请参照静态编译,此处就不重复了,此处只编了一些自用的库,如果有啥其他的,可以在issue里提,libpq之类的可以直接用编好的,更方便

依赖库:

  • PROJ > 6
    • SQLite3
    • libtiff
      • libzip(option)
    • curl
  • LIBICONV
  • libtiff >= 4.0(option)
  • Expat
  • HDF4
  • HDF5
  • PostgreSQL
  • SQLite Libraries
  • libspatialite
    • GEOS
    • freexl
    • proj
    • sqlite3
    • zlib
    • iconv
    • libxml2
    • librttopo
    • libcurl
    • libtiff
  • PCRE
  • NETCDF4
  • curl
  • geos
  • Podofo
    • freetype
    • tiff
    • jpeg
  • LZMA_CFLAGS
  • ZSTD_LIBS
  • TILEDB_LIBS
  • RDB_LIB
  • WEBP
  • libxml2
    • libiconv
  • FREEXL
    • libiconv
  • heif
    • libde265

编译顺序:

解压后,按照Fix CMake install issue (#278) 修改cmake文件,然后编译

如果需要静态库,修改CMakeLists.txt里的_BUILD_SHARED_LIBS_参数即可

cd libde265-1.0.8
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/libde265_1.0.8_x64
cmake --build . --config Release --target install

依赖libde265 ,解压后

如果需要静态库,修改CMakeLists.txt里的_BUILD_SHARED_LIBS_参数即可

cd libheif-1.12.0
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" ..  -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/libheif_1_12_0_x64 -DLIBDE265_FOUND=ON -DLIBDE265_INCLUDE_DIR=e:/GDAL_BUILD/libde265_1.0.8_x64/include -DLIBDE265_LIBRARIES=e:/GDAL_BUILD/libde265_1.0.8_x64/lib/libde265.lib
cmake --build . --config Release --target install

libcurl更新比较快,1-2月更新一个版本,请选择最新的版本,可选 opensslzlib 等库,自己参考winbuild下readme文档,最简单的编译方式如下:

cd winbuild
nmake /f Makefile.vc mode=static

生成文件将在 builds 文件夹下.需要自己拷贝出来,

在curl.h第一行添加

define CURL_STATICLIB

cmake,依然是修改CmakeList编译静态库

cd build
cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/libtiff_4_3_0_x64
cmake --build . --config Release --target install

sqlite.cmake.build中的cmake文件可用

cd build
cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/libsqlite3_36_x64
cmake --build . --config Release --target install

cmake编译

cd build
cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/proj8_1_0_x64 -DBUILD_SHARED_LIBS=OFF -DEXE_SQLITE3=E:\GDAL_BUILD\libsqlite3_36_x64\bin\shell.exe -DSQLITE3_INCLUDE_DIR=E:\GDAL_BUILD\libsqlite3_36_x64\include -DSQLITE3_LIBRARY=E:\GDAL_BUILD\libsqlite3_36_x64\lib\sqlite3-static.lib -DCURL_INCLUDE_DIR=E:\GDAL_BUILD\libcurl-7.77.0-x64\include -DCURL_LIBRARY="E:\GDAL_BUILD\libcurl-7.77.0-x64\lib\libcurl_a.lib;wsock32.lib;wldap32.lib;winmm.lib" -DTIFF_INCLUDE_DIR=E:\GDAL_BUILD\libtiff_4_3_0_x64\include -DTIFF_LIBRARY_RELEASE=E:\GDAL_BUILD\libtiff_4_3_0_x64\lib\tiff.lib -DBUILD_TESTING=OFF

cmake --build . --config Release --target install

win下编译1.16版本的iconv,直接打开2017工程编译就行

下载源码后,修改 /lib/expat.h 文件,在文件首加上:

define XML_STATIC

打开命令行,使用cmake

cd build

cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/liexpat_2_4_1_x64 -DBUILD_SHARED_LIBS=OFF

cmake --build . --config Release --target install

尽量使用4.2.12 之后版本,方便编译

直接下载cmake版本,注意是win还是其他,win下载zip压缩,其他下载tar.gz

最新是4.2.15版本,,下载CMake-hdf-4.2.15.zip

修改其中的 HDF4options.cmake 文件,文件末尾添加

set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF4_ENABLE_NETCDF:BOOL=OFF")

防止与 netcdf 库冲突

同时取消注释,编译静态库

set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF")

下载完成后,根据Visual Studio版本,运行相应的 build-VS20xx-32.bat 或者 build-VS20xx-64.bat 文件,会自动新建build文件夹,最终在 build 文件夹下生成zip文件.

老版本或者新版本的Visual Studio可直接编辑 HDF4config.cmake 文件,仿照其他bat文件写脚本.

基本与hdf4一样,下载cmake版本,修改HDF5options.cmake文件,取消注释,最后加上一行

set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF")
#add# at last
set (ADD_BUILD_OPTIONS ${ADD_BUILD_OPTIONS} -DDEFAULT_API_VERSION:STRING=v18")

即静态编译后,双击bat即可

注意:

  1. hdf5需要加DEAFAULT_API_VESION=v18

  2. 改cmakelist.txt文件 : Use of unset variable HDF5_VERSION · Issue #1962 · Unidata/netcdf-c · GitHub (fastgit.org)

  3. 在utf8环境下编译

  4. 屏蔽掉netcdf-c-4.8.0\nc_test4\tst_udf.c中的19-26行

    /*
    #if# defined(_WIN32) || defined(_WIN64)
    int
    NC4_show_metadata(int ncid)
    {
    return 0;
    }
    #endif#
    */

编译

chcp 65001
mkdir build
cd build
cmake  -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/netcdf_4_8_0_x64 -DBUILD_SHARED_LIBS=OFF  -DUSE_SZIP=ON -DUSE_HDF5=ON -DENABLE_DAP=ON -D"SZIP=E:/GDAL_BUILD/HDF5-1.12.0-win64/lib/libszip.lib” -D"ZLIB_INCLUDE_DIR=E:/GDAL_BUILD/SOURCE/CMake-hdf5-1.12.0/build/ZLIB-prefix/src/ZLIB" -D"ZLIB_LIBRARY=E:/GDAL_BUILD/HDF5-1.12.0-win64/lib/libzlib.lib"  -DENABLE_NETCDF_4=ON -D"CURL_LIBRARY=E:/GDAL_BUILD/libcurl-7.77.0-x64/lib/libcurl_a.lib;wsock32.lib;wldap32.lib;winmm.lib;crypt32.lib;Ws2_32.lib;Normaliz.lib"  -D"CURL_INCLUDE_DIR=E:/GDAL_BUILD/libcurl-7.77.0-x64/include"  -D"HAVE_HDF5_H=E:/GDAL_BUILD/HDF5-1.12.0-win64/include"  -D"HDF5_INCLUDE_DIR=E:/GDAL_BUILD/HDF5-1.12.0-win64/include"  -D"HDF5_C_LIBRARY=E:/GDAL_BUILD/HDF5-1.12.0-win64/lib/libhdf5.lib"  -D"HDF5_HL_LIBRARY=E:/GDAL_BUILD/HDF5-1.12.0-win64/lib/libhdf5_hl.lib" -DBUILD_TESTING=OFF

cmake --build . --config Release --target install

新版本的 geos 直接采用 cmake 可以生成静态库和动态库。

cd build

cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/GEOS_3_9_1_x64 -DBUILD_SHARED_LIBS=OFF

cmake --build . --config Release --target install
del cmakecache.txt
set FTDIR=E:/GDAL_BUILD/freetype_2.10.4_x64
set FTLIBDIR=E:/GDAL_BUILD/freetype_2.10.4_x64/release static/win64
set ZLIBDIR=E:/GDAL_BUILD/HDF5-1.12.0-win64
set TIFDIR=E:/GDAL_BUILD/libtiff_4_3_0_x64

cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INCLUDE_PATH="%FTDIR%/include;%JPEGDIR%/include;%ZLIBDIR%/include;%TIFDIR%/include" -DCMAKE_LIBRARY_PATH="%FTLIBDIR%;%FTDIR%/lib;%ZLIBDIR%/lib;%TIFDIR%/lib" -DPODOFO_BUILD_SHARED:BOOL=FALSE -DFREETYPE_LIBRARY_NAMES=freetype -DZLIB_LIBRARY_NAMES=libzlib -DTIFF_LIBRARY_NAMES=libTiff -DZLIB_INCLUDE_DIR=%ZLIBDIR%/include -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/podofo_0_9_7_x64

cmake --build . --config Release --target install

可以直接下载编译好的2.10.4版本,其中有动态版本和静态版本,没有尝试编译

  1. 修改nmake.opt中的输出路径
  2. 修改makefile.vc中iconv库路径和头文件路径 nmake /f makefile.vc install
  • 进入 win32 文件夹下,运行,注意编译静态库需要 static=yes 和 cruntime=/MT 同时设置

    cscript configure.js  static=yes compiler=msvc prefix=E:\GDAL_BUILD\libxml2-2.9.12_x64 include=E:\GDAL_BUILD\iconv1.16\include lib=E:\GDAL_BUILD\iconv1.16\lib cruntime=/MT
    
    nmake /f Makefile.msvc
    nmake /f Makefile.msvc install

编译完成后,在头文件中定义 LIBXML_STATIC 宏

  • 修改 makefile.vc 中的geos头文件和lib文件路径

  • 修改 nmake.opt 中的安装路径 INSTDIR

  • 下载 #25 - Handle missing 2 header files when compiling on Windows  中的两个文件

  • 在makefile.vc中第20行添加 src\rtt_tpsnap.obj  下面编译spatialite需要

  • 在vs命令行中编译

    nmake /f Makefile.vc
    nmake /f Makefile.vc install

zlib

cmake-hdf5里有压缩文件夹,可以直接解压编译,不需要重复下载

mkdir build
    cd build
    cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/zlib_x64
    cmake --build . --config Release --target install

修改 gg_utf8.c 文件中72行,注释掉

extern const char *locale_charset (void);

替换为

include <localcharset.h>

修改nmake.opt 中的输出路径

修改makefile64.vc中头文件 -I和lib的路径,所有路径都得改,主要是头文件和lib这两段,请按实际情况修改

CFLAGS = /nologo -I.\src\headers -I.\src\topology   -I.  -IE:\GDAL_BUILD\proj8_1_0_x64\include  -IE:\GDAL_BUILD\GEOS_3_9_1_x64\include  -IE:\GDAL_BUILD\iconv1.16\include -IE:\GDAL_BUILD\freeXL1_0_6_X64\include  -IE:\GDAL_BUILD\libcurl-7.77.0-x64\include  -IE:\GDAL_BUILD\libtiff_4_3_0_x64\include -IE:\GDAL_BUILD\libsqlite3_36_x64\include -IE:\GDAL_BUILD\zlib_x64\include -IE:\GDAL_BUILD\libxml2-2.9.12_x64\include\libxml2 -IE:\GDAL_BUILD\librttopo1_1_0_x64\include $(OPTFLAGS)

...

spatialite_i.lib:     $(LIBOBJ)
    link /dll /out:$(SPATIALITE_DLL) \
    /implib:spatialite_i.lib $(LIBOBJ) \
    E:\GDAL_BUILD\proj8_1_0_x64\lib\proj.lib  E:\GDAL_BUILD\GEOS_3_9_1_x64\lib\geos_c.lib E:\GDAL_BUILD\GEOS_3_9_1_x64\lib\geos.lib\
    E:\GDAL_BUILD\freeXL1_0_6_X64\lib\freexl.lib E:\GDAL_BUILD\iconv1.16\lib\libiconv-static.lib \
    E:\GDAL_BUILD\libsqlite3_36_x64\lib\sqlite3-static.lib E:\GDAL_BUILD\zlib_x64\lib\libzlib.lib \
        E:\GDAL_BUILD\libxml2-2.9.12_x64\lib\libxml2_a.lib E:\GDAL_BUILD\librttopo1_1_0_x64\lib\librttopo.lib \
    E:\GDAL_BUILD\libtiff_4_3_0_x64\lib\tiff.lib E:\GDAL_BUILD\libtiff_4_3_0_x64\lib\tiffxx.lib \           E:\GDAL_BUILD\libcurl-7.77.0-x64\lib\libcurl_a.lib wsock32.lib shell32.lib wldap32.lib winmm.lib crypt32.lib Ws2_32.lib Normaliz.lib  Ole32.lib Advapi32.lib

然后

nmake /f Makefile.vc
nmake /f Makefile.vc install

拷贝sqlite3.h的头文件到include和include/spatialite 里备用

cd build
cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=e:/GDAL_BUILD/PCRE_x64
cmake --build . --config Release --target install

pcre2在gdal中是无效的,注意,需要pcre1,但是已经不怎么维护了

修改nmake.opt,添加依赖和修改编译环境,然后运行

注意:

  1. 如果需要编HDF NETCDF等库的plugin模式,请编译动态库,不要静态库
  2. 注意依赖关系,libspatalite库的其他依赖,hdf和netcdf的其他依赖需要带上
  3. 注意头文件中静态宏的声明
  4. 编译gdal静态库的话,修改nmake.opt 设置 DLLBUILD=0 ,静态库编译比较占空间,其实不太推荐,其他库都是静态,编出来gdal303.dll不到30M,lib 2M,总体30M,静态编出来的话lib接近300M,编出来的工具大概就是30M,总体接近1G,不过好处是干净,看着没啥依赖,请按实际需求进行编译
  5. 编译后,建议先设置PROJ_LIB环境变量,或者在代码中调用 OSRSetPROJSearchPaths 设置proj.db的路径,gdal3中主要变化一个是编译都升级到c++11,另一个就是proj库升级到6以上,支持WKT2了,不加上的话会出现找不到proj.db的错误