问答 问:上一篇文章 尝试了使用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 }' 988 K 7 -zip.commandline.18 .1 .0 .nupkg5.8 M clapack-3.2 .1 .tgz2.2 M cmake-3.14 .0 -win32-x86.zip.part14 M CMake-hdf5-1.10 .5 .tar.gz2.9 M curl-curl-curl-7 _68_0.tar.gz4.0 M fftw-3.3 .8 .tar.gz17 M gdal241.zip1.9 M geos-3.6 .3 .tar.bz21.5 M glennrp-libpng-v1.6 .37 .tar.gz5.0 M GNOME-libxml2-v2.9 .9 .tar.gz1.2 M jom_1_1_3.zip7.9 M libexpat-libexpat-R_2_2_7.tar.gz5.0 M libiconv-1.16 .tar.gz545 K nasm-2.14 .02 -win32.zip8.5 M openssl-1.1 .1 d.tar.gz32 M OSGeo-PROJ-6.3 .0 .tar.gz2.2 M pcre-8.41 .zip20 M postgresql-12.0 .tar.bz252 M PowerShell-6.2 .1 -win-x86.zip2.3 M sqlite-amalgamation-3300100. zip144 M strawberry-perl-5.30 .0 .1 -32 bit.zip407 K szip-2.1 .1 .tar.gz2.2 M uclouvain-openjpeg-v2.3 .1 .tar.gz18 M Unidata-netcdf-c-b7cd387bee8c661141fabb490f4969587c008c55.tar.gz3.5 M webmproject-libwebp-v1.0 .2 .tar.gz933 K win_flex_bison-2.5 .16 .zip12 M xianyi-OpenBLAS-v0.3 .6 .tar.gz613 K xz-mirror-xz-v5.2 .4 .tar.gz594 K 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:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保 存为 Unicode 格式以防止数据丢失 [C:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mtlib.vcxproj] mapproject.c C:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保 存为 Unicode 格式以防止数据丢失 [C:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mtlib.vcxproj] gmtinfo.c C:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保 存为 Unicode 格式以防止数据丢失 [C:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mtlib.vcxproj] nearneighbor.c C:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mt_version.h(1,1): warning C4819: 该文件包含不能在当前代码页(936) 中表示的字符。请将该文件保 存为 Unicode 格式以防止数据丢失 [C:\U sers\y angleir\D ocuments\G MT\g mt-master\b uild\s rc\g mtlib.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是一个好东西,这里 有具体的安装和使用说明,以及库的调用方法。