#author("2020-01-23T11:07:39+09:00","default:Miyashita","Miyashita")
#author("2020-01-30T14:32:10+09:00","default:Miyashita","Miyashita")
*NetCDFのインストール [#l1e09ee5]
#contents
**注意点 [#xa09b246]
個人で使う PC なら通常 /usr/local/ や /opt/ の中にインストールするが,こうすると root 権限で make を行う必要がある.~
このため環境変数が root でも適切に設定されているか確認する.~
特に .bashrc でパスの追加をしている場合は,root の .bashrc も同様のことをしておかないとエラーが出る可能性がある.~
インストール前に root で ifort が実行できるか(パスが通っているか)まず確認する.~
~
また,依存関係エラーの可能性を高めるので,バージョン更新は慎重に.~
NetCDF4 を使うライブラリ(例えば GMT など)は,場合によっては更新した NetCDF4 のパスを元に再度インストールする必要がある.
~

**NetCDF3.6.3 [#aed9f6a9]
インストールを行う前に,環境に合わせてコンパイラを指定する.~
gfortran(GNU)を使うのであれば,
#codeprettify{{
export FC=gfortran
export CC=gcc
}}
PGIなら
#codeprettify{{
export FC=pgf90
export CC=pgcc
}}
ifort(Intel)なら
#codeprettify{{
export FC=ifort
export CC=gcc # icc (intel) はあまり使いたくない
}}
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
}}
をして,インストール完了.~
~

**NetCDF4 [#f4f19494]
***環境変数 [#j996e58a]
NetCDF4 のインストールには,事前に[[HDF5のインストール>../Install_HDF5]]がされていることが必須.~
パスが設定されていないと configure の時点で失敗するので,echo で確認するなどして,なければ環境変数にパスを追加する.~
HDF5が/usr/local/hdf5 にあるとして,(ユーザーはrootで)
#codeprettify{{
export CPATH=$CPATH:/usr/local/hdf5/include
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/hdf5/lib
}}

***NetCDF-C [#n84b61cf]
[[NetCDF Downloads>https://www.unidata.ucar.edu/downloads/netcdf/index.jsp]]のページでソースをダウンロードする(例えば.tar.gz).~
#codeprettify{{
tar -zxf netcdf-c-4.6.0
cd netcdf-c-4.6.0
}}
または,GitHub からリポジトリをクローンする.今後バージョンを更新するならこちらの方が楽.
#codeprettify{{
git clone https://github.com/Unidata/netcdf-c
cd netcdf-c
git checkout v4.6.0
}}
更新の時は
#codeprettify{{
git checkout v4.6.1
}}
その後,環境変数の関係で root にログインしてからやる.~
szip や hdf5 の include path 指定は各自の環境に合わせる.~
curl.h のある場所を探して,--enable-dap --with-curl=/path/curl のように curl のパス指定をする.~
もともと curl.h の場所に include のパスが通っていれば特に指定しなくても大丈夫だと思う.
#codeprettify{{
export NCDIR=/usr/local/netcdf-c-4.6.1
export CPPFLAGS="-I/usr/local/szip/include -I/usr/local/hdf5-1.x.x/include"  # -1.x.x については HDF5の環境次第
export LDFLAGS="-L/usr/local/szip/lib -L/usr/local/hdf5-1.x.x/lib"
./configure --prefix=${NCDIR} --enable-netcdf-4 --enable-shared --enable-dap --disable-dap-remote-tests \
            --with-curl=/usr/include/x86_64-linux-gnu/curl 
make
make check
sudo make 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 のインストールで得た nc-config というコマンドのシンボリックリンクを /usr/local/bin のような PATH が通っている場所に作成しておく.
#codeprettify{{
cd /usr/local/bin
ln -s ../netcdf-c-4.6.1/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=ifort
}}
#codeprettify{{
export NCDIR=`nc-config --prefix`
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=-I${NCDIR}/include # or $(nc-config --include)
export LDFLAGS=-L${NCDIR}/lib # or $(nc-config --libs)
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_CONFIG=$(nc-config)
export NETCDF_ROOT="$(${NETCDF_CONFIG} --prefix)"
export NETCDF_F_CONFIG='nf-config'
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 で確認した方が良い.

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