#author("2022-04-03T00:57:12+09:00","default:Miyashita","Miyashita") #author("2022-04-03T00:58:12+09:00","default:Miyashita","Miyashita") *NetCDFのインストール [#l1e09ee5] #contents **注意点 [#xa09b246] 個人で使う PC なら通常 /usr/local/ や の中にインストールするが,こうすると root 権限で make を行う必要がある.~ このため,環境変数が root でも適切に設定されているかを事前に確認しておく.~ 特に .bashrc でパスの追加をしている場合は,root の .bashrc でも同様のことをしておかないとエラーが出る可能性がある.~ インストール前に root で ifort が実行できるか(パスが通っているか)まず確認する.~ ~ また,依存関係エラーの可能性を高めるので,バージョン更新は慎重に.~ NetCDF4 のライブラリを使用するソフトウェア(例えば GMT )は,場合によっては更新した NetCDF4 のパスを元に再度インストールする必要がある.~ ~ **NetCDF4 [#f4f19494] ***環境変数 [#j996e58a] インストールを行う前に,環境に合わせてコンパイラを指定する.~ GNU (gfortran, gcc)を使うのであれば, #codeprettify{{ export FC=gfortran export CC=gcc }} PGI なら #codeprettify{{ export FC=pgf90 export CC=pgcc }} Intel なら #codeprettify{{ export FC=ifort export CC=icc # icc で実行可能かは未確認 }} ~ NetCDF4 のインストールには,事前に[[HDF5のインストール>../Install_HDF5]]がされていることが必須.~ パスが設定されていないと configure の時点で失敗するので,echo で確認するなどして,なければ環境変数にパスを追加する.~ HDF5が/usr/local/hdf5 にあるとして,(ユーザーはrootで) #codeprettify{{ export CPATH=/usr/local/hdf5/include:$CPATH export LD_LIBRARY_PATH=/usr/local/hdf5/lib:$LD_LIBRARY_PATH }} ~ ~ ***NetCDF-C [#n84b61cf] [[NetCDF Downloads>https://www.unidata.ucar.edu/downloads/netcdf/index.jsp]]のページでソースをダウンロードする(例えば.tar.gz).~ #codeprettify{{ tar -zxf netcdf-c-4.X.X cd netcdf-c-4.X.X }} または,GitHub からリポジトリをクローンする.ただしこれは容量がでかいのでバージョンの tag を指定してダウンロードの方が良い. #codeprettify{{ git clone https://github.com/Unidata/netcdf-c cd netcdf-c git checkout v4.6.0 }} 更新の時は #codeprettify{{ git checkout v4.6.1 }} とする.~ #codeprettify{{ export NCDIR=/usr/local/netcdf-c-4.X.X ./configure --prefix=${NCDIR} --enable-shared }} NetCDF4 の configure は --with-xxx= のようなオプションが少ない.~ 事前にインストールしておいた HDF5 や SZIP などのライブラリが参照可能なように環境変数を設定しておく必要がある.~ とりあえず思考停止で,必要そうなものは CPATH と LD_LIBRARY_PATH にそれぞれ include と lib のディレクトリに追加しておく.~ 成功したらコンパイル. #codeprettify{{ make make check sudo make install }} インストール先を /usr/ などの root しか権限がない場所に指定している場合は sudo install する. ~ ~ -エラーその1~ laptop では build(make) の際にエラーになった.エラー内容は以下の通り. undefined reference to `curl_easy_init' undefined reference to `curl_easy_setup' curl のライブラリをうまくリンクできていないようだったので, #codeprettify{{ locate libcurl }} で libcurl の場所を確認して,LDFLAGS につけ足した.~ ~ -エラーその2~ また別の時に再インストールしようとすると, /usr/bin/ld: indent.o: relocation R_X86_64_32S against `.rodata' can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: final link failed: Nonrepresentable section on output というエラーが出たので,一度 clean をしてから #codeprettify{{ export CFLAGS=-fPIC }} を新たに定義して上記の操作をやり直したら成功.~ ~ -参考1 [[Getting and Building netCDF>https://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html]]~ -参考2 [[Running the configure Script>https://www.unidata.ucar.edu/software/netcdf/netcdf-4/newdocs/netcdf-install/Configure.html]]~ ~ ~ ~ ***NetCDF-Fortran [#h1e5540b] ここでは,NetCDF-Fortranも NetCDF-C と同じディレクトリにインストールする (/usr/local/netcdf-c-4.x.x ).~ ここでは,NetCDF-Fortranも NetCDF-C と同じディレクトリにインストールする.~ どちらもバージョンを更新せず,もしするなら新たな場所にどちらもインストールし直す,と決めれば同じディレクトリでも特段の問題はないと思われる.~ ~ まず,NetCDF4-C のインストールで得た nc-config というコマンドのシンボリックリンクを /usr/local/bin のような PATH が通っている場所に作成しておく. #codeprettify{{ cd /usr/local/bin ln -s ../netcdf-c-4.x.x/bin/nc-config nc-config # シンボリックリンク作成 nc-config --prefix # 確認 実行できなかったら正しくパスが通っていない. }} 次に,NetCDF4-C と同様に [[NetCDF Downloads>https://www.unidata.ucar.edu/downloads/netcdf/index.jsp]] からダウンロードするか,リポジトリを clone するかのどちらかを行う.~ #codeprettify{{ git clone https://github.com/Unidata/netcdf-fortran cd netcdf-fortran git checkout v4.4.4 }} コンパイルの前に環境変数を設定しておく. #codeprettify{{ su export CC=gcc export FC=gfortran }} #codeprettify{{ export NCDIR=$(nc-config --prefix) export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$(nc-config --libdir) # or LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${NCDIR}/lib }} 既にインストールされているNetCDF-Cのライブラリのパスやprefixを指定し,configure, make を実行する. #codeprettify{{ export CPPFLAGS=$(nc-config --cflags) export LDFLAGS=$(nc-config --libs) #export CPPFLAGS=-I${NCDIR}/include # 上の代替方法 #export LDFLAGS=-L${NCDIR}/lib # 上の代替方法 export NFDIR=${NCDIR} ./configure --prefix=${NFDIR} --disable-fortran-type-check make check make install }} インストール後は bin に nf-config を入れておく. #codeprettify{{ cd /usr/local/bin sudo ln -s ../netcdf4-c-4.6.1/bin/nf-config nf-config }} ~ .bashrc では下記のように書いておく.~ #codeprettify{{ # NetCDF 4 export NETCDF_CONFIG=$(nc-config) export NETCDF_ROOT="$(${NETCDF_CONFIG} --prefix)" export NETCDF_F_CONFIG=$(nf-config) export NETCDF_F_ROOT="$(${NETCDF_F_CONFIG} --prefix)" export LD_LIBRARY_PATH="${NETCDF_ROOT}/lib":${LD_LIBRARY_PATH} }} ~ ~ -エラーその1 (netcdf-fortran-4.4.5)~ netcdf-fortran-4.4.5 をコンパイルする時のエラー. nf_test/ftst_rengrps.F 内で #codeprettify(lang-fortran){{ implicit none include "netcdf.inc" }} と 1-column ずれており,旧形式の FORTRAN では 7-column 目以降から書かなければならないためエラーが出る.~ 1つスペースを入れる修正が必要.~ 修正してPR送ろうと思ったら既に[[issue#192>https://github.com/Unidata/netcdf-fortran/pull/192]]で解決済だった.~ ~ -注意点~ 既に conda が入っていてその中の nc-config にパスが通っているとややこしいことがわかった.~ 最初に which nc-config で確認した方が良い.~ ~ ~ **NetCDF3.6.3 [#aed9f6a9] &color(red){使われなくなってきたのでもう基本的にインストールする必要はない.};~ netcdf-3.6.3.tar.gz をどこかで解凍し,解凍された netcdf-3.6.3 に移動する. #codeprettify{{ tar -zxf netcdf-3.6.3.tar.gz cd netcdf-3.6.3 }} その次に,prefix で保存する場所を指定しつつ,configure を実行し,下準備はOK.~ どのコンパイラでinstallしたかわかるようにしておくと混同しない.下記"_gnu"のように.~ #codeprettify{{ ./configure --prefix=/usr/local/netcdf-3.6.3_gnu }} ディレクトリはそのままで, #codeprettify{{ make sudo make install }} をして,インストール完了.~ ~ ~