ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: Fortran ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
4. Solaris Studio Fortran の機能および拡張機能
4.3.3 Cray ポインタと Fortran 95 のポインタ
4.4 STRUCTURE および UNION (VAX Fortran)
4.6.10 Fortran 2003 の FLUSH 入出力文
4.6.11 Fortran 2003 POINTER INTENT 機能
4.6.14 その他の Fortran 2003 および Fortran 2008 機能
Fortran 95 の MODULE を含むファイルをコンパイルすると、ソースで検出された MODULE ごとにモジュールインタフェースファイル (.mod ファイル) が生成されます。ファイル名は MODULE 名を基に付けられます。たとえば、MODULE xyz からは xyz.mod (すべて小文字) というファイル名が作成されます。
コンパイルを実行すると、MODULE 文を含むソースファイルごとにモジュール実装オブジェクトファイル (.o) が生成されます。モジュール実装オブジェクトファイルとその他すべてのオブジェクトファイルをリンクすると、実行可能ファイルを作成できます。
コンパイラは、-moddir=dir フラグまたは MODDIR 環境変数で指定されたディレクトリにモジュールインタフェースファイルと実装オブジェクトファイルを作成します。指定されていない場合は、現在の作業ディレクトリにある .mod ファイル に書き込みます。
コンパイラは、USE modulename 文のコンパイル時、現在の作業ディレクトリでインタフェースファイルを探します。-Mpath オプションを使用すると、コンパイラに追加の検索パスを提供できます。モジュール実装オブジェクトファイルは、リンク処理のコマンド行に明示的に列挙する必要があります。
通常、プログラマは、ファイルごとに単一の MODULE を定義し、MODULE 文とそれを含むソースファイルに同じ名前を割り当てます。ただし、これは必須ではありません。
前述の例では、すべてのファイルが一度にコンパイルされます。モジュールソースファイルは、主プログラムでの使用前に最初にコンパイルされます。
demo% cat mod_one.f90 MODULE one ... END MODULE demo% cat mod_two.f90 MODULE two ... END MODULE demo% cat main.f90 USE one USE two ... END demo% f95 -o main mod_one.f90 mod_two.f90 main.f90
コンパイルによって次のファイルが作成されます。
mainmain.oone.modmod_one.otwo.modmod_two.o
次の例では、各単位を個別にコンパイルし、それらをリンクします。
demo% f95 -c mod_one.f90 mod_two.f90 demo% f95 -c main.f90 demo% f95 -o main main.o mod_one.o mod_two.o
main.f90 のコンパイル時、コンパイラは、現在のディレクトリから one.mod および two.mod を検索します。これらのファイルは、USE 文のモジュールを参照するファイルをコンパイルする前にコンパイルしておく必要があります。そのあとの手順で、モジュール実装オブジェクトファイル mod_one.o および mod_two.o をその他すべてのオブジェクトファイルとリンクして、実行可能ファイルを作成します。
Version 7.0 の Fortran コンパイラでは、.mod ファイルはアーカイブ (.a) ファイルに格納できます。アーカイブファイルは、モジュールを検索するコマンド行で、-Mpath フラグによって明示的に指定する必要があります。デフォルトでは、コンパイラはアーカイブファイルを検索しません。
USE 文にある .mod ファイルのみが検索されます。たとえば、Fortran の USE mymod によって、コンパイラは、デフォルトでモジュールファイル mymod.mod を検索します。
検索時には、モジュールファイルが記述されるディレクトリが優先されます。これは、-moddir=dir オプションフラグおよび MODDIR 環境変数によってコントロールできます。つまり、-Mpath オプションのみが指定されている場合は、モジュールに対して、-M フラグに示されたディレクトリおよびファイルよりも先に、現在のディレクトリが検索されます。
-use=list フラグによって、1 つ以上の暗黙的な USE 文がこのフラグを指定してコンパイルされる副プログラムまたはモジュールの副プログラムに挿入されます。このフラグを使用すると、モジュールまたはモジュールファイルが、ライブラリまたはアプリケーションの機能のために要求された場合に、ソースプログラムを修正する必要がなくなります。
-use=module_name を使用してコンパイルすると、USE module_name をコンパイルされる各副プログラムまたはモジュールに追加する効果があります。-use=module_file_name を使用してコンパイルすると、module_file_name ファイルに含まれる各モジュールに USE module_name を追加する効果があります。
fdumpmod(1) コマンドを使用すると、モジュール情報ファイルの内容を表示できます。
demo% fdumpmod x.mod group.mod x 1.0 v8,i4,r4,d8,n16,a4 x.mod group 1.0 v8,i4,r4,d8,n16,a4 group.mod
fdumpmod コマンドによって、単一の .mod ファイル、連結される .mod ファイルによって形成されるファイル、.mod ファイルの .a アーカイブにあるモジュールについての情報が表示されます。表示には、モジュール名、バージョン番号、対象のアーキテクチャー、およびそのモジュールと互換性のあるコンパイルオプションを示すフラグが含まれます。詳細は、fdumpmod(1) マニュアルページを参照してください。