デフォルト時には、XL Fortran プログラムのリンクで特別に行うべきことは何もありません。 コンパイラー呼び出しコマンドは、自動的にリンカーを呼び出し、実行可能出力ファイルを作成します。 たとえば、次のコマンドを実行します。
xlf95 file1.f file2.o file3.f
これにより、オブジェクト・ファイル file1.o および file3.o がコンパイルされて作成され、次にすべての オブジェクト・ファイルがリンカーへサブミットされ、1 つの実行可能ファイルが作成されます。
リンクが終了したら、XL Fortran プログラムの実行の指示に従ってプログラムを実行してください。
後でリンクできるオブジェクト・ファイルを作成するには、-c オプションを使用します。
xlf95 -c file1.f # Produce one object file (file1.o) xlf95 -c file2.f file3.f # Or multiple object files (file1.o, file3.o) xlf95 file1.o file2.o file3.o # Link object files with appropriate libraries
コンパイラー呼び出しコマンドでリンカーを実行するのが最善な場合もあります。 このコマンドは、余分な ld オプションおよびライブラリー名をリンカーに自動的に渡すからです。
XL Fortran デフォルトの一部ではない ld オプションでリンクしなければならない場合は、 それらのオプションをコンパイラー・コマンド行に入れることができます。
xlf95 -Wl,<options...> file.f # xlf95 passes all these options to ld
コンパイラーは、-q オプション以外の認識されないオプションを ld コマンドに渡します。
XL Fortran を使用すれば、ご使用のプログラムは、動的リンク と 静的リンクの両方のためのオペレーティング・システム機能の利点を利用できるようになります。
動的にリンクされたプログラムでは、共用ライブラリーのルーチンを複数のプログラムが使用していても、ディスク・スペースも 仮想メモリーも少なくて済みます。 いくつかのプログラムが同時に同じ共用ルーチンを使用する場合は、静的にリンクされたプログラムよりも良好に 動作する場合があります。 ライブラリー・ルーチンとの命名の競合を回避するための、リンク中に行われなければならない特別な予防措置は 必要とされません。 また、動的リンクを使用すれば、再リンクしないで共用ライブラリー内のルーチンをアップグレードすることができます。
このリンク形式はデフォルトなので、これをオンにするのに追加のオプションは必要ありません。
静的にリンクされたプログラムは、XL Fortran ライブラリーがないシステムに移動してそのシステム上で実行することが できます。 静的にリンクされたプログラムが、ライブラリー・ルーチンへの呼び出しを多数行ったり、多数の小さなルーチンを 呼び出す場合、それらのプログラムは動的にリンクされたプログラムよりも良好に動作する場合があります。 ライブラリー・ルーチンとの命名の競合を回避したい場合は、プログラム内のデータ・オブジェクトおよびルーチンの 名前を選択するときに、何らかの予防措置をとる必要があります (リンク中の命名競合の回避で説明しています)。また、それらのプログラムをあるシステム上でコンパイルした後、別のレベルのオペレーティング・システムを 使用したシステム上で実行すると、機能しない場合があります。
静的にリンクを行うには、--static オプションをリンカー・コマンドに追加します。 たとえば、次のようになります。
xlf95 -Wl,--static test.f
実行時サブプログラムと同じ名前を持つ外部サブルーチン、外部関数、共通ブロックを定義すると、その名前の 定義がその場所で使用されたり、リンク・エディット・エラーが発生する場合があります。
以下の一般的な解決方法を試行して、このような種類の名前の矛盾を回避するための参考にしてください。
-qextname オプションを使用しない場合は、XL Fortran およびシステム・ライブラリー内の外部シンボルの 名前との競合を回避するために、特別な予防措置をとる必要があります。
XLF が提供する関数名 | 使用できない共通ブロック名または サブプログラム名 |
---|---|
mclock | times |
rand | irand |
プログラムに実際のルーチンを定義せずに、
サブルーチン名または関数名を使用することがないように注意してください。
その名前がいずれかのライブラリーの名前と競合すると、
プログラムはルーチンの間違ったバージョンを使用して、
コンパイル時エラーまたはリンク時エラーを作成しない場合があります。