科研菜鸟分享 http://blog.sciencenet.cn/u/sanshiphy 聚沙成塔,集腋成裘 leilphy@gmail.com

博文

I/O API v3.1 的安装(基于GCC/GFORTRAN)

已有 9958 次阅读 2017-4-24 17:21 |个人分类:技术备忘录|系统分类:科研笔记| CMAQ, ioapi

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(安装主目录),选择nocplturn 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




https://blog.sciencenet.cn/blog-200199-1050897.html

上一篇:Linux:虚拟并行运算环境mpi的配置简介
下一篇:“前言”“后记”中的人生情怀
收藏 IP: 159.226.234.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-16 23:21

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部