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 会话中启动的程序和脚本访问,这样可以确保它们能够找到所需的库和头文件。