Let's DODS (メモ版)クライアント編 gcc/g77版

トップページ
DODSGSWP2Getting Started

使用機材

以下の記述は,i386版RedHat Linux7.2 を用いた結果に基づくものです.

gccのバージョンは2.96です.また,IntelのC/C++コンパイラ for Linux(無料)ver.7.1も使用しています.

また,Fortran90コンパイラとしてIntel Fortran Compiler for Linux(無料)を使用しています.

インストール

必要最小限の環境には…

UnidataのFTPから,以下のものを持ってくる.

/usr/local/下あたりで上記三つを全部展開

# tar -xvzf DODS-*.tar.gz

DODSというディレクトリができるので,そこにはいってビルド.

# cd DODS
# ./configure
# make World

Celeron1.5GHz,メモリ384MBの場合,16分ほどかかりました.最後は多少エラーがでるけど「ignored」級なので無視.

実はこれだとIntelのFortran90コンパイラを使ってDODS netCDF呼び出しのプログラムを書いたとき,DODSのnetCDFライブラリでなくオリジナルのnetCDF関数が呼ばれてしまう(URL指定でnetCDFファイルを開くことは当然できない)という問題があります.これはgccがコンパイルオブジェクトに関数を格納するときの命名規約がIntel Fortranと整合しないからです.この件については多少ワザで回避する必要がありますので後日書きます.なお,Fortran77/Cのプログラムの場合には関係ありませんのでご安心を.

インストール時のトラブルシューティング

こちらも参考→GSWP FAQ

packagesのビルド中,libtkのコンパイルに失敗する

インクルードファイルXlib.h等が見つからないため,td3d.cのコンパイル中にエラーが大量にでて停止することがあります.

gcc -pipe -c -O -D__NO_STRING_INLINES -D__NO_MATH_INLINES -Wall -Wconversion -W\
no-implicit-int -fPIC -I/usr/local/DODS/src/packages-3.2.5/libtk/unix -I/us
r/local/DODS/src/packages-3.2.5/libtk/unix/../generic -I/usr/local/DODS
/src/packages-3.2.5/libtk/unix/../bitmaps -I/usr/local/DODS/src/packages-3.
2.5/libtcl/generic  -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DSTDC_HEADERS=1 -DHAVE
_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_PW_GECOS=1 -DSTATIC_BUILD=1      -D
TCL_NO_DEPRECATED   /usr/local/DODS/src/packages-3.2.5/libtk/unix/../generi
c/tk3d.c
In file included from /usr/local/DODS/src/packages-3.2.5/libtk/generic/tkIn
t.h:21,
                 from /usr/local/DODS/src/packages-3.2.5/libtk/generic/tk3d
.h:18,
                 from /usr/local/DODS/src/packages-3.2.5/libtk/unix/../gene
ric/tk3d.c:16:
/usr/local/DODS/src/packages-3.2.5/libtk/generic/tk.h:83:29: X11/Xlib.h: No
 such file or directory
(以下略)

これはX Windowの機能を利用するプログラムを書く場合に必要なヘッダファイル類を含むXFree86-devel(XFree86-*.src.rpm)がインストールされていないからです.

RedHatのRPM書庫から該当OSのディレクトリ(7.2の場合はこれ)に行き,XFree86-devel-*.rpmを落としてきます(ちなみにバージョン4.1.0-49だと約3.7MBあります).

たとえば/var/rpm/にそれをストアしたとすると,

[/var/rpm]# rpm -ivh XFree86-devel*.rpm

一応確認

[/var/rpm]# rpm -qa | grep XFree
XFree86-Mach64-3.3.6-42
XFree86-4.1.0-49
XFree86-devel-4.1.0-49        ←成功!
XFree86-compat-modules-3.3.6-42
XFree86-libs-4.1.0-49
XFree86-xfs-4.1.0-49

これで大丈夫です.なお,インストール用ドキュメントにはXFree86-develが必要だとは明記してありませんが,Tcl/Tkが必要だとは書いてあるので,間接的には書いてあるということになりますね.

テスト1

インストールが正常終了すると,dncdumpというプログラムができますのでそれでとりあえずテストができます. これはnetCDFの世界ではおなじみのncdumpのDODS版です.

# export DISPLAY=":0.0"
# /usr/local/DODS/bin/dncdump -h  \
  http://www.monsoondata.org:9090/dods/gswp/vector/tair_cru
netcdf tair_cru {
dimensions:
        time = 39456 ;
        lat = 1 ;
        lon = 15238 ;
variables:
        float tair(time, lat, lon) ;
               tair:_FillValue = 1.e+20f ;
                tair:long_name = "air temperature at 2m (kg/kg) " ;
    ******** (中略)
        float lon(lon) ;
                lon:units = "degrees_east" ;
                lon:long_name = "longitude" ;
                lon:minimum = 1.f ;
                lon:maximum = 15238.f ;

// global attributes:
                :title = "NCEP reanalysis-2 data hybridized with CRU data" ;
                :convention = "COARDS" ;
}
#

というわけで離れたサーバにあるnetCDFを,あたかもローカルHDDにファイルがあるときと同じように,オンラインで取ってくることに成功しました.


AGATASHI