付録5: DCPAM をビルドしているとき裏で行われていること

  1. DCPAM5 を走らせよう
  2. 発展編: 更にDCPAMを使うには
  3. 付録1: gpview の使い方
  4. 付録2: make と Makefile
  5. 付録3: ターミナルプレクサ
  6. 付録4: DCPAM に必要な資源をインストールする方法
  7. 付録5: DCPAM をビルドしているとき裏で行われていること

ここでは, DCPAM のビルド作業の中で make コマンドが行なっていることを解説します. DCPAM のビルド作業内で make はまずコンパイルをし, その後リンクというものをしてくれます (make について詳しくは[付録2] make と Makefileを参照してください).

[A5.1]オブジェクトファイルとライブラリとリンク

余り大きくないモデルなら一つのプログラムのコンパイルだけでビルドは終了します. しかしながら, 大きなモデルでは一つのプログラムだけでなく他の方が作ったプログラムを用いたいことが多々あります. その場合は, プログラムをコンパイルしてオブジェクトファイル (あるいはライブラリ) を生成し, リンクを行い実行ファイルを作ります.

オブジェクトファイル (*.o)とは実行ファイルを作成するまでにできる途中のファイルで, 計算機 (CPU) が解釈できる命令とその解釈に使われる情報が詰まっている機械語で書かれたファイルです. また, オブジェクトファイルをひとまとめにして他のソフトウエアから利用しやすい形にしたものをライブラリ (lib*.a, lib*.so) と言います.

リンクとはオブジェクトファイル (あるいはライブラリ) と他のオブジェクトファイル (あるいはライブラリ) を繋げて実行ファイルを作ることを言います.

他の方が作ったプログラムを用いたい場合は, 他の方が作ったプログラムからオブジェクトファイル (あるいはライブラリ) を生成し, それと自分のプログラムから生成したオブジェクトファイル (あるいはライブラリ) をリンクします. そうすることで他の方がつくったプログラムの機能を自分のプログラムでも用いることができるようになります.

DCPAM も他のプログラムを用いています.

[A5.2] DCPAM で用いられているプログラム

DCPAM は他のプログラムを内部で利用しています. データの入力・出力には netCDF と gtool5, 空間微分の表現には ISPACK と SPMODEL というプログラムを用いています. これらは複数のプログラムから構成されるプログラム群です. そのため, オブジェクトファイルではなくライブラリを提供してくれています. これらに関する説明を表にまとめました.

DCPAM が利用するプログラム
プログラム名 説明 Debian パッケージ 提供するライブラリ
netCDF netCDF データファイル入出力ライブラリ netcdff と netcdfc libnetcdff.a と libnetcdfc.a
gtool5 netCDF データファイルの入出力等を容易にしてくれる機能を提供するライブラリ gtool5 libgtool5.a
ISPACK 流体計算のために必要なツール (スペクトル変換等) を提供するライブラリ ispack libispack.a
SPMODEL 階層的地球流体スペクトルモデル集 spml libspml-lapack-lapack.a

それぞれのプログラムの Debian パッケージが提供するライブラリの名前も表に示してあります.

[A5.3] DCPAM をビルドしているとき裏で行われていること

DCPAM の実行ファイルを作成するまでに行なわれるビルド作業の流れの概要を図 1 に示します.

DCPAM では実行ファイル (dcpam_init_data, dcpam_init_data_surface, dcpam_main) を作るメインとなるプログラム (dcpam_init_data.f90, dcpam_init_data_surface.f90, dcpam_main.f90) とそれ以外の機能をまとめたもの (モジュールと呼びます. 例えば dynamics_hspl_vas83.F90 等) があります. モジュールはライブラリ (libdcpam.a) にし, メインとなるプログラムはオブジェクトファイルにします (例えば, dcpam_main.o 等). 最終的にメインとなるプログラムに結合し, そこからモジュールを呼び出すようにします.

make をコマンドした時 (dcpam_main の場合. dcpam_init_data および dcpam_init_data_surface も同様に行われます) の最終的な流れは以下のようになっています.

  1. DCPAM を FORTRAN コンパイラ ( FC に指定した spmfrt) でコンパイルし, libdcpam.a と dcpam_main.o を作成.
  2. ライブラリ (libdcpam.a, libnetcdff.a, libnetcdfc.a, libgtool5.a, libispack.a, libspml-lapack-lapack.a) とオブジェクトファイル (dcpma_main.o) をリンク
  3. 実行ファイル (dcpam_main) が完成

 DCPAM ビルド作業の流れ 図.1 DCPAM ビルド作業の流れ. 青色のものは DCPAM 以外のプログラムであり, DCPAM が利用するもの.

[A5.4] 補足1 spmfrt について

FORTRAN コンパイラには様々な種類があります (PGI Fortran, Intel Fortran, Fujitu Fortran, GNU Fortran 等). 情報実験機で使える FORTRAN コンパイラは GNU Fortran (コマンドは gfortran ) です. しかし, 情報実験機において DCPAM のビルド作業を行なう際には, spmfrt というコマンドを使うように指定します ($ export FC=spmfrt). spmfrt とは SPMODEL が提供してくれているコマンドで, 指定の FORTRAN コンパイラ (FC) に SPMODEL のライブラリを自動でリンクしてくれているものです. そのため中では gfortran を呼び出しています.

[A5.5] 補足2 ライブラリの作成とリンク

複数のオブジェクトファイルを結合してライブラリを作成するには ar コマンドを使います. ar コマンドはライブラリとオブジェクトファイルを結合して実行ファイルを作成する際にも使われます. 実は make で DCPAM をビルドする際にも ar コマンドを使っています (最後のライブラリのリンク時). ar コマンドはライブラリの中に格納されているオブジェクトファイルのリストを表示させることもできます.

$ ar -t libgtool5.a

のようにします.


情報実験第 11 回のページへ戻る

最終更新日: 2019/07/10 (石渡 正樹)
Copyright © 2000-2019 inex