WSLでwgrib2をビルドする手順の備忘録

windowsでwgrib2を使おうとすると、ビルド済の exe ファイルをダウンロードできるわけですが、v3.1.3とさすがにちょっと古いわけです。

https://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/Windows10

この投稿を書いている時点(2026-06-02)で、バージョンは3.8.0 でございます。
じゃあ新しくビルドし直せばいいじゃんというわけですが、クロスコンパイルするとなると環境を整えるのが大変そうで、つい尻込みしてしまいます。MinGW-w64と依存ライブラリを全部揃えたうえで、全部正しくリンクさせるとなると何となく嫌な予感しかしません。

幸い、WindowsにはWSL2という強い味方がありますので、そちらで環境をビルドした手順を備忘録のために残しておきます。OSはUbuntu24.04環境です。

ツール関連

sudo apt update

sudo apt install -y \
    build-essential \
    gfortran \
    cmake \
    git \
    libopenblas-dev \
    libpng-dev \
    zlib1g-dev \
    libjpeg-dev \
    libopenjp2-7-dev \
    libaec-dev \
    libnetcdf-dev

ソースの入手

wget https://github.com/NOAA-EMC/wgrib2/archive/refs/tags/v3.8.0.tar.gz
tar xvf v3.8.0.tar.gz
cd wgrib2-3.8.0

最小構成のビルド

いろいろ試す前に最小構成でビルドしてみます。

mkdir build
cd build

cmake ..
make

うまくいくと ./wgrib2/wgirb2 が生成されます。

./wgrib2/wgrib2 -version
3.8.0

netcdfなどのサポート

ここまでうまくいきましたら、続いてNetCDFなどの機能を追加していきます。必要なパッケージをインストールします。

sudo apt install -y \
    build-essential \
    gcc \
    g++ \
    gfortran \
    cmake \
    git \
    pkg-config \
    libnetcdf-dev \
    libnetcdff-dev \
    libopenblas-dev \
    zlib1g-dev \
    libpng-dev \
    libjpeg-dev \
    libopenjp2-7-dev \
    libaec-dev

必要なモジュールが入ったか確認

nc-config --version
nf-config --version
pkg-config --libs netcdf

先ほどを同じで、build ディレクトリでビルドするわけですが、シンプルに再実行しただけではNetCDFを使わない設定でビルドされてしまいました。念のため、buildディレクトリから再構成します。
cmake の出力に “NetCDF", “netcdf"のような記述があるかを確認します。

cd ..
rmdir -fr build
mkdir build
cd build
cmake .. \
    -DUSE_NETCDF=ON \
    -DNetCDF_ROOT=/usr
make

cmake でトラブルが出るようであれば、CMakeCache.txt を一度削除してから再実行してみるのも手です。

ビルド出来たら同様にバージョンなどを確認すると共に、ヘルプに “-netcdf"が出るかを確認します。

./wgrib2/wgrib2 -help all | grep netcdf

例えば以下のような表示があればOKです。

-netcdf
-nc_table
-nc_nlev

手持ちのMSMのgrib2ファイルで動作を試してみます。

./wgrib2/wgrib2 ./jmadata/msm/2023/202306/Z__C_RJTD_20230601000000_MSM_GPV_Rjp_L-pall_FH00-15_grib2.bin  -netcdf sample.nc

1.1:0:d=2023060100:HGT:1000 mb:anl:
1.2:0:d=2023060100:UGRD:1000 mb:anl:
1.3:0:d=2023060100:VGRD:1000 mb:anl:
1.4:0:d=2023060100:TMP:1000 mb:anl:
1.5:0:d=2023060100:VVEL:1000 mb:anl:
1.6:0:d=2023060100:RH:1000 mb:anl:
1.7:0:d=2023060100:HGT:975 mb:anl:
1.8:0:d=2023060100:UGRD:975 mb:anl:
1.9:0:d=2023060100:VGRD:975 mb:anl:
1.10:0:d=2023060100:TMP:975 mb:anl:
1.11:0:d=2023060100:VVEL:975 mb:anl:
1.12:0:d=2023060100:RH:975 mb:anl:
1.13:0:d=2023060100:HGT:950 mb:anl:
1.14:0:d=2023060100:UGRD:950 mb:anl:
1.15:0:d=2023060100:VGRD:950 mb:anl:

これで sample.nc ファイルが出来上がっていれば成功です。

ビルドが上手くいっていない場合には、NetCDFを取り込む設定になっているかを確認します。

grep -i netcdf CMakeCache.txt

表示に

USE_NETCDF:BOOL=ON

が入っていればOKですが、 値がOFFになっていたらNetCDFを使う設定になっていません。

NetCDFの追加あたりでちょっとハマりかけたので、うまくいかない場合には、そもそものライブラリの有無やビルドの設定を確認してみてください。

未分類

Posted by tomi