首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >学习笔记 | 如何在大型机上安装ncepbufr

学习笔记 | 如何在大型机上安装ncepbufr

作者头像
用户11172986
发布2026-04-24 18:58:29
发布2026-04-24 18:58:29
640
举报
文章被收录于专栏:气python风雨气python风雨

在大型机上安装ncepbufr

前言

因工作需要读bufr文件,经过一番摸索出在大型机上安装ncepbufr

把过程记录下来,既方便日后回溯,也希望帮到同样需要在“大机”上啃 BUFR 的伙伴。

项目目标

安装ncepbufr

源码地址https://github.com/NOAA-EMC/NCEPLIBS-bufr

普通安装流程

从 Releases 下载 tar 并解压。

创建 build 目录并进入该目录:

代码语言:javascript
复制
mkdir build && cd build  

运行 CMake 命令进行配置:

代码语言:javascript
复制
cmake -DCMAKE_INSTALL_PREFIX=path1 -DMASTER_TABLE_DIR=path2 ..  

编译:

代码语言:javascript
复制
make -j4  

运行测试:

代码语言:javascript
复制
ctest  

安装:

代码语言:javascript
复制
make install  

path1path2 可以是系统上的完整路径或相对路径,每个路径的最大长度为 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 来禁用它们。

大型机安装流程

由于超算账号默认配置复杂,需要特别操作

  1. 登录至可联网节点(cmake过程中需要下载测试数据)
  2. conda activate 一个含有 numpy 等的 python 环境(推荐3.10以上,至少3.8)
  3. module purge 清除默认配置
  4. module load compiler/devtoolset/7.3.1 compiler/cmake/3.26.6
  5. 新建一个 build 目录 按照普通流程配置即可
代码语言:javascript
复制
mkdir build  
cd build  
cmake -DCMAKE_INSTALL_PREFIX=$HOME/bufr -DENABLE_PYTHON=ON ..  
make -j4  
make install  

只要 cmake 第一行提示找到的是 7.3.1,便能编译成功

添加环境参数

打开 bashrc vi ~/.bashrc 增加如下两行

代码语言:javascript
复制
export LD_LIBRARY_PATH=安装路径/bufr/lib64:$LD_LIBRARY_PATH   

## 动态库  ##路径是上面的$HOME/bufr  
export PYTHONPATH=/NCEPLIBS-bufr-develop/build/python:$PYTHONPATH  


## Python库,注意查看文件夹下有无so文件,有则是编译成功  

教训

  1. 缓存未清理 :由于cmake拥有缓存机制,在cmake编译时总是出现module load了新版本的编译器,但是cmake时第一行却是老版本的gcc

检查方法

find . | grep -i cache

  1. 需要如此执行cmake:

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 版本,导致编译失败。

检查方法:

代码语言:javascript
复制
module li  
which cc  
代码语言:javascript
复制
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

  1. cmake较高版本才可输出编译过程 which cmake
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在大型机上安装ncepbufr
    • 前言
    • 项目目标
    • 普通安装流程
    • 大型机安装流程
  • 添加环境参数
    • 教训
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档