0%

在windows下编译GMT源码

问答

问:上一篇文章尝试了使用cygwin来编译GMT,出现了一些问题。那么有没有别的办法编译GMT的github开发版(还没有正式发布的版本)?
答:根据官网指南,使用Visual Studio是一个可行的办法。

问:windows下编译源码复杂吗?需要依赖诸多库怎么办?
答:比Linux复杂。具体使用vcpkg来安装库。关于怎么安装和使用vcpkg,详见官网指南。vcpkg的安装较简单,使用的时候需要在线下载依赖库的压缩文件,程序自动下载的速度和网络有关,境内下载github源码较慢,这时可手动下载文件并复制到C:\vcpkg-master\downloads文件夹下,手动下载的地址即为命令窗口最下面的地址,然后根据C:\vcpkg-master\downloads\temp下面的文件名称对其重命名,再分次执行vcpkg install netcdf-c gdal pcre fftw3[core,threads] clapack openblas --triplet x64-windows,程序会根据自动分析是否安装和是否下载,安装好的库将跳过。

vcpkg下载的依赖库,以及这些库本身的依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
yangleir@DESKTOP-FVRFATD MINGW64 /c/vcpkg-master/downloads
$ ls -lh | grep ^[^d] | awk '{print $5,"\t",$9}'

988K 7-zip.commandline.18.1.0.nupkg
5.8M clapack-3.2.1.tgz
2.2M cmake-3.14.0-win32-x86.zip.part
14M CMake-hdf5-1.10.5.tar.gz
2.9M curl-curl-curl-7_68_0.tar.gz
4.0M fftw-3.3.8.tar.gz
17M gdal241.zip
1.9M geos-3.6.3.tar.bz2
1.5M glennrp-libpng-v1.6.37.tar.gz
5.0M GNOME-libxml2-v2.9.9.tar.gz
1.2M jom_1_1_3.zip
7.9M libexpat-libexpat-R_2_2_7.tar.gz
5.0M libiconv-1.16.tar.gz
545K nasm-2.14.02-win32.zip
8.5M openssl-1.1.1d.tar.gz
32M OSGeo-PROJ-6.3.0.tar.gz
2.2M pcre-8.41.zip
20M postgresql-12.0.tar.bz2
52M PowerShell-6.2.1-win-x86.zip
2.3M sqlite-amalgamation-3300100.zip
144M strawberry-perl-5.30.0.1-32bit.zip
407K szip-2.1.1.tar.gz
2.2M uclouvain-openjpeg-v2.3.1.tar.gz
18M Unidata-netcdf-c-b7cd387bee8c661141fabb490f4969587c008c55.tar.gz
3.5M webmproject-libwebp-v1.0.2.tar.gz
933K win_flex_bison-2.5.16.zip
12M xianyi-OpenBLAS-v0.3.6.tar.gz
613K xz-mirror-xz-v5.2.4.tar.gz
594K zlib1211.tar.gz

此过程较慢,主要是下载时间和编译时间。GMT中文网站给出了一个提示,可以设置只进行release的编译,可以节约时间。此外注意PATH的设置。

After installing these dependency libraries, you also need to add vcpkg’s bin path (i.e. C:\vcpkg\installed\x64-windows\bin) and GDAL’s bin path (i.e. C:\vcpkg\installed\x64-windows\tools\gdal), to the system environmental variable PATH, so that GMT executables can find the DLL shared libraries and the GDAL tools (gdal_translate and ogr2ogr).

结果:

出现下面一堆的warning,但是最终还是编译成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
...
C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保
存为 Unicode 格式以防止数据丢失 [C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmtlib.vcxproj]
mapproject.c
C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保
存为 Unicode 格式以防止数据丢失 [C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmtlib.vcxproj]
gmtinfo.c
C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保
存为 Unicode 格式以防止数据丢失 [C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmtlib.vcxproj]
nearneighbor.c
C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保
存为 Unicode 格式以防止数据丢失 [C:\Users\yangleir\Documents\GMT\gmt-master\build\src\gmtlib.vcxproj]
...

最后测试了一个老版本中bug,发现已经修复了,说明GMT6的开发版已经顺利安装并可以使用。

  • 使用GMT6的源码自己编译和直接使用exe安装包(如 gmt-6.x.x-win64.exe)安装有区别,exe安装包已预先打包了GDAL, FFmpeg, and Ghostscript,安装后这些模块可以直接使用。而编译源码则需要使用vcpkg生成的库和工具。
  • GMT6编译之后只产生一个gmt.exe可执行文件,而exe安装模式则具有独立模块的可执行文件。
  • 和linux比较windows下使用Visual Studio编译源码的速度非常快(大概不到1分钟编译完)。
  • vcpkg是一个好东西,这里有具体的安装和使用说明,以及库的调用方法。