Oracle® Developer Studio 12.5: Fortran ユーザーズガイド

印刷ビューの終了

更新: 2016 年 6 月
 
 

2.2 コンパイラの起動

シェルプロンプトで起動される単純なコンパイラコマンドの構文は次のとおりです。

f95 [options] files...

ここで、files….f.F.f90.f95.F90.F95、または .for で終わる 1 つ以上の Fortran ソースファイル名で、options は 1 つ以上のコンパイラオプションフラグです。(.f90 または .f95 の拡張子で名前が終わるファイルは、f95 コンパイラだけが認識する「自由形式」の Fortran 95 ソースファイルです。)

次の例では、f95 は 2 つのソースファイルをコンパイルし、実行時デバッグを有効な状態にして growth という名前の実行可能ファイルを生成します。

demo% f95 -g -o growth growth.f fft.f95

注 -  f95 または f90 コマンドのいずれを使用しても、Fortran コンパイラを起動できます。

新規: コンパイラは、拡張子が .f03 または .F03 のソースファイルも受け入れます。これらは、.f95 および .F95 と同等とみなされ、ソースファイルに Fortran 2003 拡張機能が含まれていることを示す手段として利用できます。

コンパイラが受け付ける各種ソースファイルの拡張子については、ファイル名の拡張子を参照してください。

2.2.1 コンパイルとリンクの流れ

前述の例では、コンパイラは growth.offt.o のローダーオブジェクトファイルを自動的に生成し、次にシステムリンカーを起動して growth という実行可能プログラムファイルを生成します。

コンパイルの終了後、オブジェクトファイル growth.offt.o が残ります。このため、ファイルの再リンクや再コンパイルを簡単に行うことができます。

コンパイルが失敗すると、エラーごとにメッセージが返されます。エラーがあるソースファイルについては、.o ファイルや実行可能プログラムファイルは作成されません。

2.2.2 ファイル名の拡張子

コマンド行で入力するファイル名の接尾辞によって、コンパイラがそのファイルをどのように処理するかが決まります。次の表に示されていない拡張子の付いたファイル名、および拡張子のないファイル名は、リンカーに渡されます。

表 1  Fortran コンパイラが認識可能なファイル名の拡張子
接尾辞
言語
処理
.f
Fortran77 または Fortran 95 固定形式
Fortran ソースファイルをコンパイルし、オブジェクトファイルを現在のディレクトリに出力する。オブジェクトファイルのデフォルト名は、ソースファイル名に接尾辞 .o を付けたもの
.f95.f90
Fortran 95 自由形式
.f と同じ
.f03
Fortran 2003 自由形式
.f と同じ
.for
Fortran 77 または Fortran 95 固定形式
.f と同じ
.F
Fortran 77 または Fortran 95 固定形式
コンパイルの前に、FORTRAN 77 のソースファイルを Fortran または C のプリプロセッサで処理する
.F95.F90
Fortran 95 自由形式
Fortran がコンパイルする前に、Fortran 95 自由形式のソースファイルを Fortran または C のプリプロセッサで処理する。
.F03
Fortran 2003 自由形式
.F95 と同じ
.s
アセンブラ
アセンブラでソースファイルをアセンブルする
.S
アセンブラ
アセンブルする前にアセンブラのソースファイルを C プリプロセッサで処理する
.il
インライン展開
インライン展開コードのテンプレートファイルを処理する。コンパイラはテンプレートを使って、選択されたルーチンのインライン呼び出しを展開します(テンプレートファイルは特殊なアセンブラファイル。inline(1) マニュアルページを参照)。
.o
オブジェクトファイル
オブジェクトファイルをリンカーに渡す
.a.so.so.n
ライブラリ
ライブラリの名前をリンカーに渡す。.a ファイルは静的ライブラリ、.so.so.n ファイルは動的ライブラリ。

Fortran 95 自由形式については、ソース言語の機能を参照してください。

2.2.3 ソースファイル

Fortran コンパイラでは、コマンド行に複数のソースファイルを指定することができます。「コンパイルユニット」とも呼ばれる 1 つのソースファイル中に、複数の手続き (主プログラム、サブルーチン、関数、ブロックデータ、モジュールなど) を記述することができます。アプリケーションは、1 つのファイルに 1 つのソースコード手続きを記述して構成することも、同時に処理される手続きを 1 つのファイルにまとめて構成することもできます。

2.2.4 ソースファイルプリプロセッサ

f95 は、fppcpp の 2 つのソースファイルプリプロセッサをサポートしています。いずれのプリプロセッサもコンパイラから起動され、ソースコード「マクロ」とシンボリック定義を展開してから、コンパイルを開始します。コンパイラでは、デフォルトで fpp が使用されます。-xpp=cpp オプションを指定すると、fpp から cpp にデフォルトを変更できます。-Dname オプションの説明も参照してください。

fpp は Fortran 言語専用のソースプリプロセッサです。詳細は、fpp(1) のマニュアルページを参照してください。これは、デフォルトでは、.F.F90.F95、または .F03 という拡張子の付いたファイルで起動されます。

fpp のソースコードは、Netlib から入手できます。

標準的な Unix C 言語のプリプロセッサについては、cpp(1) を参照してください。Fortran のソースファイルでは、fpp よりも cpp を使用することをお勧めします。

2.2.5 コンパイルとリンクの分離

コンパイルとリンクをそれぞれ個別に実行することができます。-c オプションを指定すると、ソースファイルをコンパイルして .o オブジェクトファイルが生成されますが、実行可能ファイルは生成されません。-c オプションを指定しない場合、コンパイラはリンカーを起動します。このようにコンパイルとリンクを別々に実行すると、次の例に示すように、1 つのファイルを修正するための目的で全体を再コンパイルする必要がなくなります。

1 つのファイルをコンパイルし、別の手順でほかのオブジェクトファイルとリンクします。

demo% f95 -c file1.f                          (Make new object file)
demo% f95 -o prgrm file1.o file2.o file3.o         (Make executable file)

リンク時には (2 行目)、完全なプログラムを作成するのに必要なすべてのオブジェクトファイルを必ず 指定してください。オブジェクトファイルが不足していると、未定義の外部参照エラー (ルーチンの不足) によって、リンクが失敗します。

2.2.6 コンパイルとリンクの整合性

コンパイルとリンクを別のステップで行う場合は、整合性のあるコンパイルとリンクのオプションを選択することが重要です。オプションによっては、プログラムの一部をコンパイルするときに使用したら、リンクするときにも同じオプションを使用する必要があります。すべてのソースファイルを、リンクも含めて指定してコンパイルする必要のあるオプションが数多くあります。

第 3 章では、このようなオプションについて説明します。

例: -fast を使用して sbr.f をコンパイルし、C ルーチンをコンパイルしてから、別のステップでリンクします。

demo% f95 -c -fast sbr.f
demo% cc -c -fast simm.c
demo% f95 -fast sbr.o simm.o        link step; passes  -fast  to the linker

2.2.7 認識されないコマンド行引数

コンパイラで認識されないコマンド行の引数はすべて、リンカーオプション、オブジェクトプログラムファイル名、またはライブラリ名である可能性があるとみなされます。

基本的には次のように区別されます。

  • 認識されないオプション (- が付いている) には、警告メッセージが出力されます。

  • 認識されない非オプション (- が付いていない) には、警告メッセージが出力されません。ただし、これらのオプションがリンカーに渡されて、リンカーに認識されない場合には、リンカーエラーメッセージが出力されます。

例:

demo% f95 -bit move.f           <- -bit は認識された f95 オプションではありません
f95: Warning: Option -bit passed to ld, if ld is invoked, ignored otherwise
demo% f95 fast move.f           <- ユーザーは -fast と入力するべきでした
ld: fatal: file fast: cannot open file; errno=2
ld: fatal: File processing errors.  No output written to a.out

最初の例では、-bitf95 では認識されず、このオプションはこれを解釈しようとするリンカー (ld) に渡されます。ld では 1 文字のオプションを続けて並べることもできるため、-bit-b -i -tと解釈されます。-b、-i、-t はいずれも ld の有効なオプションであるからです。これは、ユーザーが意図している場合と、意図していない場合とがあります。

2 つ目の例では、f95 の共通のオプションとして -fast を指定しようとしていますが、先頭のハイフンが抜けています。この場合も、コンパイラは引数をリンカーに渡し、リンカーはこれをファイル名と解釈します。

前述の例から、コンパイラコマンドを指定する場合には、十分な注意が必要であることがわかります。

2.2.8 モジュール

f95 は、ソースファイル中にある各 MODULE 宣言に対して、それぞれモジュール情報ファイルを自動的に作成し、USE 文で引用されるモジュールを検索します。検出されたモジュール (MODULE module_name) ごとに、コンパイラは、対応するファイル module_name.mod を現在のディレクトリ内に生成します。たとえば、ファイル mysrc.f95 中にある MODULE list 単位のモジュール情報ファイル list.modf95 によって生成されます。

モジュール情報ファイルを記述および検索するためにデフォルトのパスを設定する方法については、-Mpath および -moddir dirlist オプションフラグを参照してください。

すべてのコンパイルユニットで暗黙的に MODULE 宣言を行う方法については、-use コンパイラオプションを参照してください。

fdumpmod(1) コマンドを使用すると、.mod モジュール情報ファイルの内容を表示できます。

詳細は、モジュールファイルを参照してください。