はじめに
気象データの解析は主にFortranが使用されてきました。最近はPythonもよく見かけます。一方、C/C++で解析をしている人はあまり見かけません。自分はC++が好きなので、C++でnetCDFデータの解析ができるように環境設定をしたのですが、情報が全然なくて困ったため、記録として残します。
それと、WSL使っちゃえば(多分)楽なんですけど、Visual Studioでやりたいことがあったので、Visual Studioで使えるようにしてみます。
環境・使うもの
- Windows 11
- Visual Studio 2022(17.7.6)
- vcpkg
- git(2.42.0)
前置き
Visual StudioおよびGit for Windowsがインストールされているものとします。
用語
vcpkg
Microsoftが提供しているC++ライブラリのパッケージ管理ツールです。netcdf-cxx4のインストール時に使用します。netcdf-cxx4の依存ライブラリは結構な数あるので、こういったツールがないとそれらを全てCMakeすることになります。(はじめはCMake使おうと思ってたんですけど、コマンドを4回叩いたところで心が折れました……。)
vcpkgには、ライブラリを全部グローバルにインストールするクラシックモードと、ディレクトリ毎にバージョンを指定してインストールするマニフェストモードの二種類の操作方法があります。今回はクラシックモードでやります。
netCDF
気象分野で広く使われるデータ形式の一種。アメリカのUnidataが開発し、FortranやCなど様々な言語で利用可能なAPIが提供されています。気象屋さんお馴染みですね。
vcpkgの導入
ドキュメントの手順に従ってインストールします。
1: githubからクローンする
git clone
PowerShellを開き、適当な場所にクローンします。今回はC:\Users\usernameにおきます。Windowsはパスが長すぎると動いてくれないので、あんまり下層には置かないように。
2: bootstrapを起動し、vcpkgをビルドする。
.\vcpkg\bootstrap-vcpkg.bat
全部自動でビルドしてくれます。ビルド後にvcpkg.exe
という名前の実行ファイルが生成されます。
(1と2の手順は、Githubからzipでダウンロードして、解凍したフォルダの中にあるbootstrap-vcpkg.bat
をダブルクリックする方法でも大丈夫です。)
vcpkgの中に移動して、コマンドが使えるか確認してみます。
cd vcpkg
./vcpkg
vcpkgのパスを環境変数に設定すれば、どこでコマンドを叩いても認識してくれます。今回はやりません。以後、vcpkg以下で作業をするものとします。
netcdf-cxx4をインストールする
vcpkg search [keyword]
で利用可能ライブラリを検索することができます。netcdf-cxx4がちゃんと対応しているか確認します。
PS C:\Users\username\vcpkg> .\vcpkg search netcdf
gdal[netcdf] Enable NetCDF support
minc 2.4.03#3 MINC - Medical Image NetCDF or MINC isn't netCDF
minc[minc1] Support minc1 file format, requires NETCDF
netcdf-c 4.8.1#4 A set of self-describing, machine-independent data formats that support th...
netcdf-c[dap] Build with DAP remote access client support
netcdf-c[hdf5] Build with HDF5 support
netcdf-c[nczarr] Build with NCZarr cloud storage access support
netcdf-c[nczarr-zip] Build with NCZarr ZIP support
netcdf-c[netcdf-4] Build with netCDF-4 support
netcdf-c[tools] Build utilities
netcdf-cxx4 4.3.1#5 a set of machine-independent data formats that support the creation, acces...
The result may be outdated. Run `git pull` to get the latest results.
If your port is not listed, please open an issue at and/or consider making a pull request. - https://github.com/Microsoft/vcpkg/issues
最下段にありました。名前もnetcdf-cxx4
でよさそうです。
ではインストールしましょう。以下のコマンドを実行します。vcpkg install [名前]
でインストールされます。
./vcpkg install netcdf-cxx4
30分くらい待ちましょう。これでnetcdf-cxx4がインストールされました。簡単すぎてちょっと不安になりますね。インストールしたライブラリを確認してみます。./vcpkg list
と入力します。
PS C:\Users\username\vcpkg> ./vcpkg list
curl:x64-windows 8.4.0#1 A library for transferring data with URLs
curl[non-http]:x64-windows Enables protocols beyond HTTP/HTTPS/HTTP2
curl[schannel]:x64-windows SSL support (Secure Channel)
curl[ssl]:x64-windows Default SSL backend
curl[sspi]:x64-windows SSPI support
hdf5:x64-windows 1.14.2 HDF5 is a data model, library, and file format f...
hdf5[szip]:x64-windows Build with szip
hdf5[zlib]:x64-windows Build with zlib
netcdf-c:x64-windows 4.8.1#4 A set of self-describing, machine-independent da...
netcdf-c[dap]:x64-windows Build with DAP remote access client support
netcdf-c[hdf5]:x64-windows Build with HDF5 support
netcdf-c[nczarr]:x64-windows Build with NCZarr cloud storage access support
netcdf-c[netcdf-4]:x64-windows Build with netCDF-4 support
netcdf-cxx4:x64-windows 4.3.1#5 a set of machine-independent data formats that s...
pkgconf:x64-windows 2.1.0 pkgconf is a program which helps to configure co...
szip:x64-windows 2.1.1#12 Szip compression software, providing lossless co...
vcpkg-cmake-config:x64-windows 2022-02-06#1
vcpkg-cmake:x64-windows 2023-05-04
vcpkg-pkgconfig-get-modules:x64-windows 2023-09-06
vcpkg-tool-meson:x64-windows 0.63#1 Meson build system
zlib:x64-windows 1.3 A compression library
zlibやhdf5等の依存ライブラリも全部まとめてインストールされていることがわかります。vcpkg全体で大体13GBくらいでした。
Visual Studioで使用する
.\vcpkg integrate install
integrateコマンドを実行することで、Visual Studioでライブラリを利用することができます。一度実行すれば、今後はどこのプロジェクトでも#include <netcdf>
と書くことができます。
早速、Visual Studioを開いてみましょう。
「新しいプロジェクトの作成」→「コンソールアプリ」→「作成」を選択します。
netcdf-cxx4のgithubの下部に使用例が記載されているので、コピー&ペーストします。
ちゃんと読めてそうですね!今度はビルドしてみます。
「ビルド」→「ソリューションのビルド」、「デバッグ」→「デバッグの開始」を選択します。
上手くいっていれば、simple_xy.ncがcppファイルのディレクトリに出力されているはずです。
おわりに
CMakeで2日悩んでいたところが一時間ちょっとで終わってしまった。感動。
今度はgribも扱ってみたいですね。