|||
V1.0 2017-4-23
v1.1 2017-5-3
v2 2017-5-12 : v1版介绍的是一步安装流程,但最近发现仍然无法成功编译m3tool,会出现无法定义iargc的错误,这个错误按照说明书的介绍好像是gcc/gfortran 版本的问题。好在安装CMAQ只要libioapi.a就够了,因此v2版本就改为部分编译。本帖后面仍然保留一步安装方法,供参考。
I/O API 是CMAQ模式安装必备工具,本帖介绍nocpl的安装方式,具体流程如下:
1、下载并解压缩
https://www.cmascenter.org/ioapi/documentation/all_versions/html/AVAIL.html#build
cd /home/pub/lib/ioapi31
tar -xvzf ioapi-3.1.tar.gz
2、设置环境变量BIN和建立安装子目录
确定自己所用机器的型号,例如博主用的是x86_64,且编译器为gcc, gfortran,查找ioapi31/ioapi目录下对应的Makefileinclude文件为Makefileinclude.Linux2_x86_64,因此,在源文件目录下建立一个名为Linux2_x86_64的新文件夹,并设置环境变量BIN(安装子目录):
mkdir ioapi31/Linux2_x86_64
vim ~/.bashrc
export BIN=Linux2_x86_64
source ~/.bashrc
3、修改ioapi目录下的Makefile
本帖介绍的是nocpl的安装方式,需要用到Makefile.nocpl
cd ioapi31/ioapi
cp Makefile.nocpl Makefile
vim Makefile
# 修改BASEDIR如下:
BASEDIR = /home/pub/lib/ioapi31
保存修改后的Makefile
4、修改ioapi目录下的Makeinclude.Linux2_x86_64
vim Makeinclude.Linux2_x86_64
4.7以上版本的gfortran可能会出现不兼容问题,因此需要删除或注释掉ARCHFLGS一项中的-DNEED_ARGS=1
保存修改后的Makeinclude.Linux2_x86_64
5、安装
make
查看Linux2_x86_64中是否有libioapi.a
如果没安装成功,在ioapi中运行make clean,修改后重新make
参考文献:
安装文件中的README.txt文档(ioapi31/README.txt)
------------------------------- 以下是一步安装流程,供参考,接前文第1步开始 -------------------------
2、修改主目录下的Makefile
修改BASEDIR(源文件目录)、INSTALL(安装主目录),选择nocpl(turn off PVM coupling mode),具体修改内容如下标黄部分(以下部分文字有出入,是由于博客编辑器的问题):
BASEDIR = /home/pub/lib/ioapi31
INSTALL = /home/pub/lib/ioapi31
LIBINST = $(INSTALL)/$(BIN)
BININST = $(INSTALL)/$(BIN)
#CPLMODE = cpl
#IOAPIDEFS = -DIOAPICPL
#PVMINCL = \$(PVM\_ROOT)/conf/\$(PVM\_ARCH).def
# **** Variants ****
#
CPLMODE = nocpl# turn off PVM coupling mode
IOAPIDEFS= # for "nocpl"
PVMINCL = /dev/null# for "nocpl"
千万注意CPLMODE = nocpl 后面没有空格,PVMINCL = /dev/null后面也没有空格。
3、设置环境变量BIN和建立安装子目录
确定自己所用机器的型号,例如博主用的是x86_64,且编译器为gcc, gfortran,查找ioapi31/ioapi目录下对应的Makefileinclude文件为Makefileinclude.Linux2_x86_64,因此,在源文件目录下建立一个名为Linux2_x86_64的新文件夹,并设置环境变量BIN(安装子目录):
mkdir ioapi31/Linux2_x86_64
vim ~/.bashrc
export BIN=Linux2_x86_64
source ~/.bashrc
4、建立netcdf库链接
ln -s /usr/local/netcdf/lib/libnetcdff.a Linux2_x86_64/
ln -s /usr/local/netcdf/lib/libnetcdf.a Linux2_x86_64/
注意:如果用的是netcdf4.x以前的版本,则只需要链接libnetcdf.a:
ln -s /usr/local/netcdf/lib/libnetcdf.a Linux2_x86_64/
且在m3tools/Makefile.nocpl.sed中修改:
LIBS=-L\${OBJDIR} -lioapi -lnetcdf \$(OMPLIBS) \$(ARCHLIB) \$(ARCHLIBS)
#LIBS = -L\${OBJDIR} -lioapi -lnetcdff -lnetcdf \$(OMPLIBS) \$(ARCHLIB) \$(ARCHLIBS)
5、编译和安装
退回到源主目录,执行:
make configure
make
make若出现错误,需要make clean后重新执行
6、强调
为保证编译成功,强调两点:
1)LIBS中或其它任何出现 -lnetcdff -lnetcdf 的地方,一定是-lnetcdff在前,因为netcdf-fortran库是依赖于netcdf-C库的,如果顺序反了,会出现与netcdff相关的undefined reference to的错误
2)编译netcdf时,建议采用以下方式:
对于netcdf-C : ./configure --prefix=/usr/local/netcdf --disable-netcdf-4 --disable-dap --with-pic
对于netcdf-fortran: ./configure --prefix=/usr/lcoal/netcdf FC=gfortran --with-pic
--with-pic 是为了解决编译过程中出现类似:relocationR_X86_64_32against `.rodata' can not be used when making a shared object; recompile with -fPIC的错误。
参考文献:
http://blog.sina.com.cn/s/blog_905660420101ags9.html
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-16 23:21
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社