本文不再维护更新!
本文介绍如何在 Linux 下安装 GMT 5.1.x。GMT 5.2.x 在 Linux 下的安装见 GMT 5.2.x 在 Linux 下的安装
说明:
- 仅适用于 5.1.0、5.1.1 和 5.1.2
- 所有命令均在一般用户下完成,需要 root 权限的命令都用
sudo
执行
下载
GMT 5.1.2 需要下载三个文件:
- GMT 源码: gmt-5.1.2-src.tar.gz
- 全球海岸线数据 GSHHG:gshhg-gmt-2.3.4.tar.gz
- 全球数字图表 DCW:dcw-gmt-1.1.2.tar.gz
下载完成后,可以用 md5sum
检查压缩文件的 md5 值,以保证该文件是完整且未被篡改的:
$ md5sum gmt-5.1.2-src.tar.gz gshhg-gmt-2.3.4.tar.gz dcw-gmt-1.1.2.tar.gz
dacaa6863fa6a0059d53b49216912007 gmt-5.1.2-src.tar.gz
80947a92cc88927aff070556ca5ab133 gshhg-gmt-2.3.4.tar.gz
45c99d30026742dbc0b1644ea64f496d dcw-gmt-1.1.2.tar.gz
解决依赖关系
基础依赖包
GMT 的编译需要 C 和 C++ 编译器、cmake 等开发工具。
对于 Ubuntu/Debian:
sudo apt-get update
sudo apt-get install gcc g++ cmake make
对于 CentOS/RHEL/Fedora:
sudo yum install gcc gcc-c++ cmake make
GMT 的编译过程要求 cmake 的版本 >=2.8.5
,需要注意:
- 安装 cmake 之后,可以通过
cmake --version
检查 cmake 版本; - CentOS 6.5 的官方源中 cmake 的版本为 2.6.4,版本过低,无法满足要求;
- CentOS 6.6 的官方源中 cmake 的版本为 2.8.12,可以满足要求;
- 使用 CentOS 6.5 的用户可以
yum update
将系统升级到 6.6,即可使用较高版本的 cmake; - CentOS6.5 用户若不愿意升级整个系统,则需要先安装 EPEL 源,再安装 EPEL 源中的
cmake28
, 并且在接下来的编译过程中要将cmake
命令改成cmake28
; - CentOS 7 官方源中 cmake 版本为 2.8.11,可以直接安装使用;
软件依赖包
GMT5 的依赖包,相对来说要复杂很多:
- 看 PS 文件以及将 PS 转换成其他格式需要
ghostscript
- 网格文件需要
netCDF
(>=4.0,且需要支持 netCDF-4/HDF5) - Perl 兼容正则表达式库 PCRE
- 地理空间数据抽象库 GDAL
- Fourier 变换库 FFTW
- 如果想要自行编译文档的话还需要 Sphinx 以及 TeXLive
对于 Ubuntu/Debian:
sudo apt-get update
# 必须安装的包
sudo apt-get install ghostscript libnetcdf-dev
# 推荐安装的包
sudo apt-get install libgdal-dev python-gdal
# 可选的安装包
sudo apt-get install libpcre3-dev libfftw3-dev
# 不推荐安装的包
sudo apt-get install python-sphinx
对于 RHEL/CentOS/Fedora:
# 安装必须的包
sudo yum install ghostscript netcdf-devel
# 推荐安装的包
sudo yum install gdal-devel gdal-python
# 可选的安装包
sudo yum install pcre-devel fftw-devel
# 不推荐安装的包
sudo yum install python-sphinx
一些需要注意的地方:
- 一定不要试图自己手动编译 netCDF,因为手动编译很难解决依赖问题,网上的大多数手动编译 netCDF 的教程中都关闭了 netCDF 对 HDF5 的支持,因而导致 GMT5 无法使用。如果在阅读本文之前曾经手动编译过,一定要将原来手动编译生成的文件删除干净。通常可以使用
locate netcdf
找到/usr/local
目录下的与 netCDF 相关的文件,直接删除即可。 - CentOS 官方源中不带有 netCDF,需要先安装 EPEL 源
- pcre、fftw 和 gdal 不是必须要安装的,但是推荐安装。其中 gdal 在做数据格式转换时非常有用;
- 其他发行版很久不用了,不清楚细节,读者可以在使用过程中补充。
安装 GMT
将刚才下载的三个压缩文件都放在同一个目录里,以下假定目录名为 /home/seisman/Desktop/GMT
:
# 当前目录名为 /home/seisman/Desktop/GMT
$ pwd
/home/seisman/Desktop/GMT
# 当前目录下包含了三个压缩文件
$ ls
dcw-gmt-1.1.2.tar.gz gmt-5.1.2-src.tar.gz gshhg-gmt-2.3.4.tar.gz
# 解压三个压缩文件
$ tar -xvf gmt-5.1.2-src.tar.gz
$ tar -xvf gshhg-gmt-2.3.4.tar.gz
$ tar -xvf dcw-gmt-1.1.2.tar.gz
# 将 gshhg 和 dcw 数据复制到 gmt 的 share 目录下
$ mv gshhg-gmt-2.3.4 gmt-5.1.2/share/gshhg
$ mv dcw-gmt-1.1.2 gmt-5.1.2/share/dcw-gmt
# 切换到 gmt 源码目录下
$ cd gmt-5.1.2
# 新建用户配置文件
$ gedit cmake/ConfigUser.cmake
向 cmake/ConfigUser.cmake
文件中加入如下语句:
set (CMAKE_INSTALL_PREFIX"/opt/GMT-5.1.2")
set (GMT_INSTALL_MODULE_LINKS FALSE)
set (COPY_GSHHG TRUE)
set (COPY_DCW TRUE)
CMAKE_INSTALL_PREFIX
设置 GMT 的安装路径,可以修改为其他路径GMT_INSTALL_MODULE_LINKS
为 FALSE,表明不在 GMT 的 bin 目录下建立命令的软链接,也可设置为 TRUECOPY_GSHHG
为 TRUE 会将 GSHHG 数据复制到GMT/share/coast
下COPY_DCW
为 TRUE 会将 DCW 数据复制到GMT/share/dcw
下
以下几点说明,仅供高阶用户阅读:
- GMT 提供了用户配置的模板文件
cmake/ConfigUserTemplate.cmake
,其中包含了众多可配置的变量以及大量的注释说明。可以直接将该文件名复制为cmake/ConfigUser.cmake
,然后在模板基础上做修改,以自定义 GMT 的安装。仅供高阶用户使用 CMAKE_INSTALL_MODULE_LINKS
的作用是在 GMT 的 bin 目录下建立命令的软链接,以兼容 GMT4 语法,建议设置为 FALSE- 配置文件中
GSHHG_ROOT
和DCW_ROOT
可以用于指定数据所在路径。此处已将数据放在 GMT 的 share 目录下,使得在配置过程中 GMT 可以自动找到,因而不需要设置这两个变量 - 若系统中存在多个 GMT 的版本,按照上面的做法会存在多个 GSHHG 和 DCW 数据的副本,造成数据冗余。此时,可以将 gshhg 和 dcw 数据放在专门的目录中,比如
/home/seisman/Datas/
目录下。然后有两种解决办法:完全按照上面的做法,在安装完成后,删除
/opt/GMT-5.1.2/share
目录下的coast
和dcw
两个目录,并建立两个指向数据的真实数据的软链接:$ cd /opt/GMT-5.1.2/share $ sudo rm -r coast/ $ sudo rm -r dcw/ $ sudo ln -s /home/seisman/Datas/gshhg-gmt-2.3.4 gshhg $ sudo ln -s /home/seisman/Datas/dcw-gmt-1.1.2 dcw
设置配置文件如下:
set (CMAKE_INSTALL_PREFIX"/opt/GMT-5.1.2") set (GMT_INSTALL_MODULE_LINKS FALSE) set (GSHHG_ROOT"/home/seisman/Datas/gshhg-gmt-2.3.4") set (COPY_GSHHG FALSE) set (DCW_ROOT"/home/seisman/Datas/dcw-gmt-1.1.1") set (COPY_DCW FALSE)
继续执行如下命令以检查 GMT 的依赖关系:
$ mkdir build
$ cd build/
$ cmake ..
cmake ..
会检查 GMT 对软件的依赖关系,我的检查结果如下:
* Options:
* Found GSHHG database : /home/seisman/Desktop/GMT/gmt-5.1.2/share/gshhg (2.3.4)
* Found DCW-GMT database : /home/seisman/Desktop/GMT/gmt-5.1.2/share/dcw-gmt
* NetCDF library : /usr/lib64/libnetcdf.so
* NetCDF include dir : /usr/include
* GDAL library : /usr/lib64/libgdal.so
* GDAL include dir : /usr/include/gdal
* FFTW library : /usr/lib64/libfftw3f.so
* FFTW include dir : /usr/include
* Accelerate Framework :
* Regex support : PCRE (/usr/lib64/libpcre.so)
* ZLIB library : /usr/lib64/libz.so
* ZLIB include dir : /usr/include
* License restriction : no
* Triangulation method : Shewchuk
* Build mode : shared
* Build GMT core : always [libgmt.so]
* Build PSL library : always [libpsl.so]
* Build GMT supplements : yes [supplements.so]
* Build proto supplements : none
*
* Locations:
* Installing GMT in : /opt/GMT-5.1.2
* GMT_DATADIR : /opt/GMT-5.1.2/share
* GMT_DOCDIR : /opt/GMT-5.1.2/share/doc
* GMT_MANDIR : /opt/GMT-5.1.2/share/man
-- Configuring done
-- Generating done
正常情况下的检查结果应该与上面给出的类似。若出现问题,则需要检查之前的步骤是否有误,检查完毕后重新执行 cmake ..
,直到出现类似的检查结果。检查完毕后,开始编译和安装:
$ make -j
$ sudo make -j install
自行编译文档
如果系统中安装了 sphinx 和 LaTeX,则可以自行编译文档。一般情况下,不建议自行编译文档,官方提供的文档已经足够:
$ make -j docs_man # 生成 man 文档
$ make -j docs_html # 生成 HTML 文档
$ make -j docs_pdf # 生成 PDF 文档
$ make -j docs_pdf_shrink # 生成更小的 PDF 文档
$ sudo -j make install
修改环境变量
修改环境变量并使其生效:
$ echo 'export GMT5HOME=/opt/GMT-5.1.2' >> ~/.bashrc
$ echo 'export PATH=${GMT5HOME}/bin:$PATH'>> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT5HOME}/lib64'>> ~/.bashrc
$ exec $SHELL -l
说明
- 第一个命令向
~/.bashrc
中添加环境变量GMT5HOME
- 第二个命令修改
~/.bashrc
,将 GMT5 的 bin 目录加入到PATH
中 - 第三个命令将 GMT5 的 lib 目录加入到动态链接库路径中,若为 32 位系统,则为
lib
;64 位系统则为lib64
; - 第四个命令是重新载入 bash,相当于
source ~/.bashrc
- 某些发行版下可能需要写入到
~/.bash_profile
而不是~/.bashrc
- 某些发行版下可能需要退出再重新登陆,或关机重启
测试是否安装成功
在终端键入 gmt
,若出现如下输出,则安装成功:
$ gmt
GMT - The Generic Mapping Tools, Version 5.1.2 (r14256) [64-bit]
Ubuntu 14.04/15.04 以及部分 Debian 用户,可能会出现如下信息:
$ gmt
Sub-commands for gmt:
install install more modules
ERROR: Please specify valid params for 'gmt'.
出现该错误的原因是这几个发行版中的 libgenome-perl
包中提供了同名的命令 /usr/bin/gmt
,把该软件包卸载即可。
参考来源
修订历史
- 2013-11-06:初稿;
- 2014-02-22:cmake 版本需要 2.8 以上;
- 2014-03-02:更新至 GMT 5.1.1;
- 2014-09-14:更新 GSHHG 至 2.3.2;
- 2014-09-26:Ubuntu 下
libxaw-dev
应为libxaw7-dev
; - 2014-11-04:修改环境变量
LD_LIBRARY_PATH
; - 2014-11-29:CentOS 6.6 中的 cmake 版本为 2.8.12;
- 2015-02-01:更新 GSHHG 至 2.3.4;
- 2015-03-14:路径中不能用波浪号代替家目录;
- 2015-05-05:更新至 GMT 5.1.2;
- 2015-08-29:Ubuntu 和 Debian 中存在与 gmt 冲突的包;
- 2015-09-06:推荐安装 gdal 的 Python 绑定;
- 2015-09-18:下载完成后检测压缩文件的 md5 值;
- 2015-10-11:GMT5 不依赖于 Xt 等库文件;
- 2015-11-07:简化安装细节,本文仅修改 BUG,不再更新内容;