【WPS安装】WPS编译错误总结:WPS编译失败+仅编译成功ungrib等

news/2024/12/22 12:48:08 标签: WRF

WPS编译错误总结:WPS编译失败+仅编译成功ungrib等

  • WPS编译过程
  • 问题1:WPS编译失败
    • 错误1:gfortran: error: unrecognized command-line option ‘-convert’; did you mean ‘-fconvert=’?
    • 解决方案
  • 问题2:WPS编译三个exe文件只出现ungrib.exe
    • 解决方案1:修改configure.wps文件
    • 解决方案2:取消MPI的环境变量设置
  • 问题3:ungrib 编译失败
    • 1. GRB2库包安装
      • zlib库(PNG 库使用的压缩库)
      • libpng库(“无损”压缩的压缩库)
      • jasper库(JPEG2000 标准的“有损”压缩实现)
    • 2. 确认配置路径
  • 参考
    • 另:为什么要修改 .bashrc 文件的环境变量?

WPS编译过程

WRF 预处理系统使用与 WRF 模型类似的构建机制。geogrid 和 metgrid 的外部库仅限于 WRF 模型所需的库,因为 WPS 使用 WRF 模型的 WRF I/O API 实现;因此,必须在安装 WPS 之前编译 WRF,以便 WPS 程序可以使用 WRF 外部目录中的 I/O API 库。

构建 WRF 模型(和 WPS)所需的唯一库是 netCDF;但是,ungrib 程序需要三个压缩库来支持 GRIB Edition 2(如果不需要支持 GRIB2 数据,则可以编译 ungrib 而无需这些压缩库)。

1、获取 WPS 代码

2、移至 WPS 目录(请注意,它可能被命名为其他名称,例如 WPSV4.4)。
建议清理 WPS 目录,以确保没有残留的配置或编译文件:

cd WPS
cd /home/testmodel/Build_WRF/WPS-4.6.1/

./clean
./clean -a

3、设置 WRF_DIR 环境变量。
在 WPS 编译中,ungrib.exe 程序需要使用 GRIB2 数据格式库。如果未正确设置这些路径,ungrib.exe 的编译会失败。

export JASPERLIB=/path/to/grib2/lib
export JASPERINC=/path/to/grib2/include

export JASPERLIB=/home/testmodel/soft/grib2/lib
export JASPERINC=/home/testmodel/soft/grib2/include

4、配置WPS

./configure

5、编译WPS
在命令行中输入以下内容(始终使用“&>”语法将标准错误和输出发送到日志文件。如果编译失败,这很有用)。

./compile >& compile.log

与编译 WRF 相比,WPS 编译应该相对较快。如果成功,以下可执行文件应出现在 WPS 目录中,并从其相应的源代码目录链接。

ls geogrid.exe ungrib.exe metgrid.exe

geogrid.exe -> geogrid/src/geogrid.exe
ungrib.exe -> ungrib/src/ungrib.exe
metgrid.exe -> metgrid/src/metgrid.exe

在这里插入图片描述
终于!终于编译成功了!!!!要命啊啊啊啊啊!!!

ls -ls geogrid/src/geogrid.exe

【注意】必须先成功编译WRF,才能编译WPS,顺序不能颠倒。如果编译WRF后配置WPS时仍提示No compiled WRF code found,则说明WPS找不到WRF的目录,请检查你的WRF文件夹的名称是否为WRF,或者设置WRF文件夹的路径:

export WRF_DIR=/home/xxx/Build_WRF/WRFV4.5.1

问题1:WPS编译失败

如果代码编译失败,请打开日志文件(例如,compile.log)并搜索大写字母“E”的“Error”一词。通常,文件中列出的第一个错误是失败的罪魁祸首,所有其他错误都是初始问题的结果。

错误1:gfortran: error: unrecognized command-line option ‘-convert’; did you mean ‘-fconvert=’?

这是因为编译器 gfortran 不支持 Intel Fortran 编译器(ifort)的选项 -convert。WPS 的配置文件中包含了 -convert 选项,而编译时使用的是 gfortran,导致选项无法识别。

问题原因

1、编译器选项冲突:
-convert 是 Intel Fortran 编译器(ifort)特有的选项,用于指定字节序(如 -convert big_endian)。
gfortran 的等价选项是 -fconvert=,例如 -fconvert=big-endian。
如果 WPS 配置文件中生成了 -convert,但实际使用 gfortran 编译,就会出现此问题。

2、编译器不一致:
在配置 WPS 时,选择了 Intel 编译器(如选项 23: Intel Classic Compilers dmpar),但实际编译时使用了 gfortran。
这通常是因为环境变量未正确设置,导致 WPS 的编译器调用了错误的编译器。

在WPS编译时选择15(采用icc进行编译),与默认的编译器不同,导致报错。

解决方案

1、确保编译器一致性
编译 WPS 时,必须使用与 WRF 编译时相同的编译器。假设 WRF 使用 Intel 编译器(ifort 和 icc),请确保环境中默认的编译器是 Intel 编译器。

设置 Intel 编译器环境:

source /opt/intel/oneapi/setvars.sh
source /home/testmodel/intel/oneapi/setvars.sh

验证 ifort 和 icc 是否可用:

which ifort
which icc

问题2:WPS编译三个exe文件只出现ungrib.exe

WPS编译成功,但只出现ungrib.exe,如下:
在这里插入图片描述

1、确保 WRF 编译成功。
WPS geogrid 和 metgrid 可执行文件使用 WRF/external/ 目录中的外部 I/O 库 - 安装 WRF 时会构建这些库,如果安装不正确,geogrid 和 metgrid 程序将无法编译。

2、检查构建 WPS 时使用的编译器(和版本)是否与构建 WRF 时使用的编译器(和版本)相同。

3、检查构建 WPS 时使用的 netCDF(和版本)是否与构建 WRF 时使用的 netCDF(和版本)相同。

4、WRF_DIR 的路径是否设置正确?
检查 WRF 目录的路径和名称

echo $WRF_DIR

解决方案1:修改configure.wps文件

由于WRF编译先于WPS编译,因此可能出现WPS的configure文件中WRF_DIR路径不对的情况,可以在./configure之后,检查configure.wps文件中的WRF-DIR是否正确。

并且在WRF-LIB的设置中,在-lnetcdf之后添加 -lgomp,再执行compile操作。
在这里插入图片描述

解决方案2:取消MPI的环境变量设置

如果在此之前你已经安装编译了MPI,那么需要取消MPI的环境变量设置,这是因为mpi的存在会影响WPS的编译(这里我选择的WPS为serial)。

在当前shell下执行 :

unset MPI
unset MPI_LIB
unset MPI_INC

之后./clean -a 并重新编译,即可成功。

问题3:ungrib 编译失败

1. GRB2库包安装

确保 jasper、zlib 和 libpng 库已正确安装(如果使用 GRIB2 支持进行编译)。
如果计划使用 GRIB Edition 2 输入数据运行真实数据模拟(很有可能),WPS ungrib 程序需要以下库,因此必须在配置 WPS 之前安装这些库。

用户可以获取这些库并将其安装在他们的系统上,或者他们可以使用在编译 WPS 期间构建的库的 WPS 内部副本(适用于 4.4 及以上版本)。

用户安装的压缩库的路径在 configure.wps 文件中由“COMPRESSION_LIBS”和“COMPRESSION_INC”变量处理。确保 WPS 配置能够找到所有库文件的最简单方法是将这三个文件都安装在一个公共目录中。例如,如果库将安装在 /usr/local 中,则在 /usr/local 中创建一个库,名称类似于 grib2。请参阅每个库下方的说明,以确保它们安装在正确的位置。

zlib库(PNG 库使用的压缩库)

1、下载 zlib 包并解压。
从 zlib 的官方网站或其镜像下载最新版本的 zlib 包。下面以 zlib 1.2.13 为例:

wget https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz  # 使用 wget 下载 zlib
tar -zxvf zlib-1.2.13.tar.gz               # 解压缩下载的 tar.gz 文件

2、进入解压后的目录

cd zlib-1.2.13

3、发出以下命令进行安装
(注意:这是按照上述示例将所有库文件放在 grib2 目录中。此路径可能因系统和用户偏好而异)

./configure --prefix=/usr/local/grib2
./configure --prefix=/home/wanzhou/soft/grib2
./configure --prefix=/home/testmodel/soft/grib2
make
make install

4、验证安装是否成功

ls /usr/local/grib2/lib | grep zlib

ls /home/wanzhou/soft/grib2/lib | grep zlib

libpng库(“无损”压缩的压缩库)

1、下载 PNG 包并解压。

wget http://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz
tar -zxvf libpng-1.6.37.tar.gz

2、进入解压后的目录

cd libpng-1.6.37

3、执行以下命令进行安装
(注意:这是按照上述示例将所有库文件放在 grib2 目录中。此路径可能因系统和用户偏好而异)

./configure --prefix=/usr/local/grib2
./configure --prefix=/home/wanzhou/soft/grib2
./configure --prefix=/home/testmodel/soft/grib2
make
make install

4、验证安装是否成功

ls /usr/local/grib2/lib | grep zlib

ls /home/wanzhou/soft/grib2/lib | grep zlib

应该看到类似于 libpng.so 或 libpng.a 的文件。

jasper库(JPEG2000 标准的“有损”压缩实现)

1、下载 JasPer 包并解压。

wget https://sourceforge.net/projects/jasper/files/jasper-version-1.900.1.zip/download -O jasper-1.900.1.zip
unzip jasper-1.900.1.zip

2、进入解压后的 JasPer 目录

cd jasper-1.900.1

3、发出以下命令进行安装
(注意:这是按照上述示例将所有库文件放在 grib2 目录中。此路径可能因系统和用户偏好而异)

./configure --prefix=/usr/local/grib2
./configure --prefix=/home/wanzhou/soft/grib2
make
make install

2. 确认配置路径

确保“configure.wps”中的以下行使用了正确的路径。

1、可以在configure前执行以下命令:

export JASPERLIB=/home/testmodel/soft/grib2/lib
export JASPERINC=/home/testmodel/soft/grib2/include

2、也可在configure之后,打开configure.wps文件,修改以下路径

COMPRESSION_LIBS = -L/$path-to-ungrib-libraries/lib -ljasper -lpng -lz
COMPRESSION_INC = -I/$path-to-ungrib-libraries/include

参考

1、CSDN官网-WPS编译三个exe文件只出现ungrib.exe?解决办法

2、WRF论坛-(RESOLVED) When compiling WPS3.9.1, weird things georigid.exe and ungrib.exe were generated, but one metgrid.exe

另:为什么要修改 .bashrc 文件的环境变量?

1、持久性:当你在终端中使用 export 命令时,设置的环境变量只在当前会话中有效。如果你关闭终端或打开一个新的终端窗口,这些变量将不再存在。通过将这些 export 命令添加到 .bashrc 文件中,可以确保每次打开终端时,这些环境变量都会自动设置。

2、方便性:如果你经常需要使用 GRIB2 库,修改 .bashrc 文件可以避免每次手动设置环境变量的麻烦。

3、共享性:在 .bashrc 中设置的环境变量可以被所有在该 shell 会话中启动的程序和脚本访问,这样可以确保它们能够找到所需的库和头文件。


http://www.niftyadmin.cn/n/5795373.html

相关文章

git全教程(长期更新)

1. git安装 git下载 有Linux,Mac,Windows三种版本用于下载 我们这里以Windows为例 1.1 安装exe 安装目录最好别有中文 建议选择vim编辑器 后面直接无脑点next即可 1.2 检验安装是否完备 安装完毕之后,目前比较新的版本的git都会自动…

Linux之RPM和YUM命令

一、RPM命令 1、介绍 RPM(RedHat Package Manager).,RedHat软件包管理工具,类似windows里面的setup,exe是Liux这系列操作系统里而的打包安装工具。 RPMI包的名称格式: Apache-1.3.23-11.i386.rpm “apache’” 软件名称“1.3.23-11” 软件的版本号&am…

Emacs 折腾日记(五)——elisp 数字类型

本文是参考 emacs lisp 简明教程 写的,很多东西都是照搬里面的内容,如果各位读者觉得本文没有这篇教程优秀或者有抄袭嫌疑、又或者觉得我更新比较慢、再或者其他什么原因,请直接阅读上述链接中的教程。 上一篇我们讲了elisp中的流程控制结构相…

spring mvcservlet跳转页面没有样式效果

导致该问题的原因很多&#xff0c;这里为解决办法之一 原因 <!-- 配置视图解析器 --> <bean class"org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name"prefix" value"/jsp/"/> <pro…

深入探讨C++标准输入输出流:iostream

C标准库中的输入输出流(iostream)是处理数据输入和输出的核心部分&#xff0c;提供了灵活且高效的方式来读写各种数据类型。通过理解和运用iostream&#xff0c;开发者可以实现丰富的输入输出功能&#xff0c;从而增强程序的交互性和用户体验。本文将深入探讨C的标准输入输出流…

MySQL通过binlog日志进行数据恢复

记录一次阿里云MySQL通过binlog日志进行数据回滚 问题描述由于阿里云远程mysql没有做安全策略 所以服务器被别人远程攻击把数据库给删除&#xff0c;通过查看binlog日志可以看到进行了drop操作&#xff0c;下面将演示通过binlog日志进行数据回滚操作。 1、查询是否开始binlog …

【WRF教程第3.2期】预处理系统 WPS详解:以4.5版本为例

预处理系统 WPS 详解&#xff1a;以4.5版本为例 WPS 嵌套域&#xff08;WPS Nested Domains&#xff09;USGS 和 MODIS 土地利用重力波拖拽方案静态数据&#xff08;Gravity Wave Drag Scheme Static Data&#xff09;1. 什么是重力波拖拽方案&#xff08;GWDO&#xff09;静态…

为什么AI智能体需要工作流

在上一篇文章《大模型原理到提示词优化》中&#xff0c;我介绍了几种优化LLM回答效果的方法&#xff08;建议没看过的读者去看看&#xff09;。这些方法运用得当&#xff0c;能显著提升LLM回答的质量&#xff0c;特别是思维链和多轮交互的方式。虽然这些优化方法可以提升单个LL…