#author("2022-11-22T15:41:46+09:00","default:Miyashita","Miyashita")
#author("2022-11-22T15:46:25+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 が/home/miyashita/local/src/hdf5 にあるとして,(ユーザーはrootで)
#codeprettify{{
export CPATH=$HOME/local/src/hdf5/include:$CPATH
export LD_LIBRARY_PATH=$HOME/local/src/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=$HOME/local/src/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
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]
先に,これの前にインストールした NetCDF4-C の bin のパス環境変数 PATH に追加して,nc-config コマンドが使えるようにしておく.
ここでは,NetCDF-Fortranも NetCDF-C と同じディレクトリにインストールする.~
どちらもバージョンを更新せず,もしするなら新たな場所にどちらもインストールし直す,と決めれば同じディレクトリでも特段の問題はないと思われる.~
~
NetCDF4-C と同様に [[NetCDF Downloads>https://www.unidata.ucar.edu/downloads/netcdf/index.jsp]] からダウンロードするか,リポジトリを clone するかのどちらかを行う.~
#codeprettify{{
tar zxvf netcdf-fortran-4.X.X.tar.gz
cd netcdf-fortran-4.X.X
}}
コンパイルの前に環境変数を設定しておく.
#codeprettify{{
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 NFDIR=$(nc-config --prefix)
export CFLAGS=$(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
}}
~
~
-エラーその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
make install
}}
をして,インストール完了.~
~
~

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes