因工作需要读bufr文件,经过一番摸索出在大型机上安装ncepbufr
把过程记录下来,既方便日后回溯,也希望帮到同样需要在“大机”上啃 BUFR 的伙伴。
安装ncepbufr
源码地址https://github.com/NOAA-EMC/NCEPLIBS-bufr
从 Releases 下载 tar 并解压。
创建 build 目录并进入该目录:
mkdir build && cd build
运行 CMake 命令进行配置:
cmake -DCMAKE_INSTALL_PREFIX=path1 -DMASTER_TABLE_DIR=path2 ..
编译:
make -j4
运行测试:
ctest
安装:
make install
path1 和 path2 可以是系统上的完整路径或相对路径,每个路径的最大长度为 240 个字符。
库和实用程序的安装将位于 path1 下。主 BUFR 表的安装将位于 path2 下,如果从上述 CMake 命令中省略 -DMASTER_TABLE_DIR=path2,则主 BUFR 表将安装在 path1 下。
如果需要 Python 互操作性,可以在上述 CMake 命令中添加 -DENABLE_PYTHON=ON。但是,系统必须安装并可用 Python 3 版本。
在构建库时,默认包含自动化 CI 测试。如果不需要此功能,可以通过在上述 CMake 命令中添加 -DBUILD_TESTING=OFF 并省略后续的 ctest 步骤来禁用测试。
在构建库时,默认包含相关的实用程序。如果不需要这些实用程序,可以通过在上述 CMake 命令中添加 -DBUILD_UTILS=OFF 来禁用它们。
由于超算账号默认配置复杂,需要特别操作
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$HOME/bufr -DENABLE_PYTHON=ON ..
make -j4
make install
只要 cmake 第一行提示找到的是 7.3.1,便能编译成功
打开 bashrc vi ~/.bashrc 增加如下两行
export LD_LIBRARY_PATH=安装路径/bufr/lib64:$LD_LIBRARY_PATH
## 动态库 ##路径是上面的$HOME/bufr
export PYTHONPATH=/NCEPLIBS-bufr-develop/build/python:$PYTHONPATH
## Python库,注意查看文件夹下有无so文件,有则是编译成功
检查方法
find . | grep -i cache
CC=gcc cmake .....
或者 module load compiler/devtoolset/7.3.1
而不是 module load compiler/gcc/7.3.1
原因是 cmake 在找编译器时,优先找 cc ,compiler/gcc/7.3.1 这个版本里没有 cc、所以找到的仍然是系统级的 gcc 4.8.5 版本,导致编译失败。
检查方法:
module li
which cc
NCEPLIBS-bufr-develop/src/arallocf.F90:18:0: internal compiler error: in expand_expr_real_1, at expr.c:9358
subroutine arallocf
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [src/CMakeFiles/bufr_4_f.dir/arallocf.F90.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [src/CMakeFiles/bufr_4_f.dir/all] Error 2
make: *** [all] Error 2
以上报错为gcc调用了系统4.8.5版本的编译器,解决方案看2