使用 gcc 7.5 編譯 WRF 程式時無法建立執行檔

我在台灣衫一號下,嘗試安裝 WRF ,
按照 hackmd 上的說明安裝好 Dependency ,
安裝的是說明使用的 gcc/7.5.0 、mpich-3.1.4-t 、hdf5-1.8.21-t、
pnetcdf-1.12.0-t、netcdf-c-4.7.3-t、netcdf-fortran-4.4.5-t
執行編譯並查看結果後發現,執行檔並未成功被建立。
以下是我編譯過程的記錄,我有什麼做的不對的地方嗎?

==========================================================================
build started:   Sat Feb 10 01:07:21 CST 2024
build completed: Sat Feb 10 01:14:16 CST 2024
 
---> Problems building executables, look for errors in the build log  <---
 
==========================================================================

查看 build log,第一個遇到的問題如下。
gcc 並沒有 “-ip” 這個參數。
我認為是編譯器問題,
在嘗試更換編譯器版本、更換成 intel 編譯器、
載入 mpi 相關模組、載入 fortan 相關模組,
均未得到解決。

(上略)
make[3]: Entering directory `/home/u1/jonathan0hsu/wrf-hw/WRF_ISC21/external/io_g
rib_share'
make[4]: Entering directory `/home/u1/jonathan0hsu/wrf-hw/WRF_ISC21/external/io_g
rib_share'
rm -f io_grib_share.o
gcc  -I. -w -O3 -ip -DRSL0_ONLY -DDM_PARALLEL -DLANDREAD_STUB=1 -DMAX_HISTORY=25 
-DNMM_CORE=0   -c get_region_center.c
/pkg/gcc/9.3.0/bin/cpp -P -nostdinc  -traditional-cpp  -I. io_grib_share.F > io_g
rib_share.f90
gcc  -I. -w -O3 -ip -DRSL0_ONLY -DDM_PARALLEL -DLANDREAD_STUB=1 -DMAX_HISTORY=25 
-DNMM_CORE=0   -c gridnav.c
gcc  -I. -w -O3 -ip -DRSL0_ONLY -DDM_PARALLEL -DLANDREAD_STUB=1 -DMAX_HISTORY=25 
-DNMM_CORE=0   -c open_file.c
gcc: error: unrecognized command line option ‘-ip’; did you mean ‘-p’?
make[4]: [gridnav.o] Error 1 (ignored)
gcc: error: unrecognized command line option ‘-ip’; did you mean ‘-p’?
make[4]: [get_region_center.o] Error 1 (ignored)
gcc: error: unrecognized command line option ‘-ip’; did you mean ‘-p’?
make[4]: [open_file.o] Error 1 (ignored)
gfortran  -I.  -w -ffree-form -ffree-line-length-none -fconvert=big-endian -frecord-marker=4     -I.     -c io_grib_share.f90
ar ru ./libio_grib_share.a io_grib_share.o get_region_center.o gridnav.o open_file.o
ar: creating ./libio_grib_share.a
ar: get_region_center.o: No such file or directory
make[4]: [thisdir_archive] Error 1 (ignored)
ranlib ./libio_grib_share.a
ranlib: './libio_grib_share.a': No such file
make[4]: [thisdir_archive] Error 1 (ignored)
make[4]: Leaving directory `/home/u1/jonathan0hsu/wrf-hw/WRF_ISC21/external/io_grib_share'
make[3]: Leaving directory `/home/u1/jonathan0hsu/wrf-hw/WRF_ISC21/external/io_grib_share'
(下略)

我的步驟

module load gcc/7.5.0
module load intel
module load mpi/openmpi-4.0.5/gcc930
module load zlib-1.2.11-t
module load mpich-3.1.4-t
module load hdf5-1.8.21-t
module load pnetcdf-1.12.0-t
module load netcdf-c-4.7.3-t
module load netcdf-fortran-4.4.5-t

export APPROOT=/home/jonathan0hsu/wrf-hw
export NETCDF=/usr
export WRFIO_NCD_LARGE_FILE_SUPPORT=1
export NETCDF_classic=1
export HDF5=$APPROOT/opt/hdf5-1.8.21
export PNETCDF=$APPROOT/opt/pnetcdf-1.12.0

./clean -a

./configure 選擇 35

sed -i '/^CFLAGS_LOCAL/s/.*/CFLAGS_LOCAL    =       -w -O3 -ip -DRSL0_ONLY/' configure.wrf

qsub script.sh

我的 PBS 檔案( script.sh )如下

#!/bin/bash

#PBS -l nodes=2:ppn=40
#PBS -P ACD112218
#PBS -q ctest
#PBS -N compileWrf

module purge


module load gcc/7.5.0
module load intel
module load mpi/openmpi-4.0.5/gcc930
module load zlib-1.2.11-t
module load mpich-3.1.4-t
module load hdf5-1.8.21-t
module load pnetcdf-1.12.0-t
module load netcdf-c-4.7.3-t
module load netcdf-fortran-4.4.5-t

export APPROOT=/home/jonathan0hsu/wrf-hw
export NETCDF=/usr
export WRFIO_NCD_LARGE_FILE_SUPPORT=1
export NETCDF_classic=1
export HDF5=$APPROOT/opt/hdf5-1.8.21
export PNETCDF=$APPROOT/opt/pnetcdf-1.12.0

cd ./wrf-hw/WRF_ISC21
./compile -j 6 em_real >& build_wrf.log

echo "Compile End"

查詢過後試過但失敗的方法:

  1. 改使用 gcc/9.3.0,得到一樣的結果
  2. 在執行 ./compile -j 16 em_real >& build_wrf.log 前,
    增加 cpp 位置:sed -i ‘s#/lib/cpp#/pkg/gcc/9.3.0/bin/cpp#’ configure.wrf
  3. 試過 configure 選擇 67 ,並且改使用 intel/2019_u5,發生了 ifort 編譯問題
  4. 改在台灣衫三號上執行,安裝好 Dependency 後編譯,遇到同樣的問題
  5. 將 configure 檔案中的 -ip 改成 -p,編譯未成功
  6. 將編譯的核心數由 16 個改為現在的 6 個,並不影響

另外我在一個論壇上,看到有人與我遇到相似的問題,
但並未附上解決方法。
https://bbs.06climate.com/forum.php?mod=viewthread&tid=96875&page=1&mobile=no

想請問我是否有哪一個步驟做的不對或是漏掉了什麼東西,
以及是否有解決方法?

感激不盡

1個讚

同學好,

如你所說,這個錯誤出自於 -ip 不是 gcc 的參數。
直覺的解決方式是:你需要將 -ip 從你的 configure.wrf 中移除。

建議你嘗試檢查你的 configure.wrf ,找到錯誤訊息指令中的 -ip 是出自於何處?

gcc  -I. -w -O3 -ip -DRSL0_ONLY -DDM_PARALLEL -DLANDREAD_STUB=1 -DMAX_HISTORY=25 -DNMM_CORE=0   -c get_region_center.c

查明白後,再仔細檢查 script 中何處加入了 -ip,應該有助於你 debug。

William Mou

1個讚

@WilliamMou

謝謝您的提示,

在台灣衫三號上,
直接將 configure.wrf 中的 CFLAGS_LOCAL 更改成 gcc 的 cflags,
再執行編譯,成功編譯完成。

台灣衫一號彼時等待中的計算工作過多,
尚無法進行測試。

問題已經解決,再次感謝您撥空回答。