爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14362|回复: 4

Linux下Netcdf与Parallel-Netcdf编译安装

[复制链接]

新浪微博达人勋

发表于 2020-3-13 00:09:27 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
      组内有一台小型机,因为常年没有人维护,各种环境乱的不行,除了拿来用Matlab,计算全跑到天河上去。毕竟一百多个线程,一直闲置着实在可惜,因此这一次就打算重新编译一下最新版本的Netcdf和pnetcdf,过程中也是碰到了各种各样的问题,能够查到的资料也相对较少,同时多少都存在一些问题,因此把我的整个过程记录下来,如果大家也有这方面的需要能够提供一点帮助。
      平台:CentOS 6.9
下载地址:ftp://ftp.unidata.ucar.edu/pub/netcdf/
      安装顺序:
  • zlib 1.2.8
  • szip 2.1
  • hdf5 1.8.13
  • pnetcdf 1.12.1
  • netcdf-c 4.7.3
  • netcdf-fortran 4.5.2

   因为netcdf 4.2版本以上c和fortran库分开了,所以需要分别安装。

首先确定好你的系统编译器环境,
export CC=mpiicc
export CXX=mpiicpc
export FC=mpiifort
在这里我使用的是intel compiler + impi,如果使用openmpi或mpich,要记得把mpiicc改为mpicc,mpiifort改为mpifort,配置完成后通过which mpiicc和mpiicc --version 来确认一下编译器环境配置的是否正确。
我的顶层目录 :/usr/local/netcdf-intel-mpi/

1) zlib安装
配置安装信息:./configure --prefix=/usr/local/netcdf-intel-mpi/zlib
编译:make -j8
检查:make check
安装:make install

2)szip安装
配置安装信息:./configure --prefix=/usr/local/netcdf-intel-mpi/szip
编译:make -j8
检查:make check
安装:make install

3)hdf5安装
配置安装信息:CPPFLAGS="-I/opt/impi/5.0.1.035/intel64/include" LDFLAGS="-L/opt/impi/5.0.1.035/intel64/lib" ./configure --with-zlib=/usr/local/netcdf-intel-mpi/zlib/ --with-szlib=/usr/local/netcdf-intel-mpi/szip/ --prefix=/usr/local/netcdf-intel-mpi/hdf5 --enable-fortran --enable-parallel --enable-shared --disable-static
编译:make -j8
检查:make check
安装:make install
注意:
1. 前两个在安装过程中基本不会出错,因此是否make check可以自我选择,但是从这里开始建议不要省略这个步骤;
2. 在这里我遇到了即使使用了--enable-shared进行配置,在configuration summary里仍然显示我选择了静态库安装的方式,后来与Unidata netcdf support 沟通后,他们建议可以进一步加上--disable-static选项,尽管这一项在configure中并不能查到,在添加这一选项后,无法启动动态库的这一问题解决;

4)parallel-netcdf安装
配置安装信息:CPPFLAGS="-I/usr/local/netcdf-intel-mpi/hdf5/include -I/usr/local/netcdf-intel-mpi/szip/include -I/usr/local/netcdf-intel-mpi/zlib/include -I/opt/impi/5.0.1.035/intel64/include" LDFLAGS="-L/usr/local/netcdf-intel-mpi/hdf5/lib -lhdf5_hl -lhdf5 -lz -lm -L/usr/local/netcdf-intel-mpi/szip/lib  -L/usr/local/netcdf-intel-mpi/zlib/lib -L/opt/impi/5.0.1.035/intel64/lib" ./configure --prefix=/usr/local/netcdf-intel-mpi/pnetcdf --with-mpi=/opt/impi/5.0.1.035/intel64  --enable-shared --enable-large-file-test --enable-null-byte-header-padding --enable-burst-buffering --enable-profiling --disable-static
编译:make -j8
检查:make check
安装:make install
注意:
1. 必须要加上--with-mpi选项;
2. 除上一选项和--enable-shared以外,其余选项可根据自身需求进行选择,如选择--enable-large-file-test 的话在make check中会需要较长的时间;
3. 按照Github上的安装指南,parallel-netcdf库同时也可以在安装完成netcdf后进行安装,使用--with-netcdf选项;

5) netcdf-c库安装
配置安装信息:CPPFLAGS="-I/usr/local/netcdf-intel-mpi/hdf5/include -I/usr/local/netcdf-intel-mpi/pnetcdf/include" LDFLAGS="-L/usr/local/netcdf-intel-mpi/hdf5/lib -lhdf5_hl -lhdf5 -lz -lm -L/usr/local/netcdf-intel-mpi/pnetcdf/lib -lpnetcdf" ./configure --prefix=/usr/local/netcdf-intel-mpi/netcdf --enable-shared --enable-pnetcdf --enable-parallel-tests --disable-static --disable-dap
编译:make -j8
检查:make check
安装:make install
注意:
1. 如果没有输入--disable-dap的话,需要预先安装curl,这里因为没有这一需求,所以并没有安装;
2. 如果有跨平台编译需求的话,需要加上--host ,--build可以不写
3. 把netcdf-c在pnetcdf后安装,需要跟上--enable-pnetcdf
4. 务必make check,说多了都是泪

6)netcdf-fortran安装
配置安装信息:CPPFLAGS="-I/usr/local/netcdf-intel-mpi/hdf5/include -I/usr/local/netcdf-intel-mpi/pnetcdf/include -I/usr/local/netcdf-intel-mpi/netcdf/include" LDFLAGS="-L/usr/local/netcdf-intel-mpi/hdf5/lib -lhdf5_hl -lhdf5 -lz -lm -L/usr/local/netcdf-intel-mpi/pnetcdf/lib -lpnetcdf -L/usr/local/netcdf-intel-mpi/netcdf/lib" ./configure --prefix=/usr/local/netcdf-intel-mpi/netcdf --enable-shared --enable-parallel-tests --disable-static
编译:make -j8
检查:make check
安装:make install
注意:
1. 在这里不需要跟--enable-pnetcdf和--disable-dap选项
2. 如果即使已经LDFLAGS里指定了动态库路径,在configure中还会报错,那么需要进一步通过export来声明(cshell下env)
3. 如果你的GNU是使用了SCL的虚拟环境的,那么务必把它禁用掉,按照我的自身经验,SCL下的GNU不知道为什么不支持shared library。只要启动就会报各种奇怪的错误。
4. 如果遇到configure:error:cannot run C compiled programs. 尝试通过清理路径和库路径解决,如 export PATH= ; export LD_LIBRARY_PATH= ;
5. 出现了无法解释的错误,可以尝试查看libtool找出不合理的地方;
6. 如果在配置了LDFLAGS后,依旧出现了configure: error: Could not link to netcdf C library. Please set LDFLAGS,尝试看一下是否前面有模块选择了静态库方式,那样你需要进一步定义LD_LIBRARY_PATH和LIBS;


希望大家都可以安装成功!


参考链接:
1. 4.2版本后netcdf-fortran安装
https://www.unidata.ucar.edu/software/netcdf/docs/building_netcdf_fortran.html
2. Parallel-netcdf安装
https://github.com/Parallel-NetCDF/PnetCDF/blob/master/INSTALL
3. 安装netcdf fortran库出错
http://bbs.06climate.com/forum.php?mod=viewthread&tid=40952
4. Configure error cannot compute size of (off_t)
https://www.unidata.ucar.edu/support/help/MailArchives/netcdf/msg13820.html
5. netcdf-fortran f90_tst_parallel_fill.f90 error 5028
https://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2013/msg00415.html
6. Makefile编译选项CC与CXX/CPPFLAGS、CFLAGS与CXXFLAGS/LDFLAGS
https://blog.csdn.net/hjwang1/article/details/44497489
7. MPI编译环境的使用
https://scc.ustc.edu.cn/zlsc/pxjz/201408/W020140804352832344867.pdf
8. configure: error: cannot run C compiled programs
https://github.com/avast/retdec/issues/425
9. Libtool claims it does not support shared libraries during cross compilation
https://stackoverflow.com/questions/14368627/libtool-claims-it-does-not-support-shared-libraries-during-cross-compilation
10. linux下动态库的生成和链接
https://blog.csdn.net/xiaqunfeng123/article/details/51301731









密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-3-13 10:02:06 | 显示全部楼层
楼主万岁哦~
--enable-parallel-tests,这个选项加上各种报错,要命了
想想还是用超算省事,module load就完了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-13 13:25:51 | 显示全部楼层
点赞!!!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2021-8-2 12:59:12 | 显示全部楼层
安装完netcdf后,编译其他软件时出现Error: Cannot open module file ‘netcdf.mod’ ,楼主知道这个该怎么解决吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-10-8 22:38:12 | 显示全部楼层
默听泉 发表于 2021-8-2 12:59
安装完netcdf后,编译其他软件时出现Error: Cannot open module file ‘netcdf.mod’ ,楼主知道这个该怎么 ...

同问...请问你解决了吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表