XL Fortran for AIX V8.1.1

ユーザーズ・ガイド


XL Fortran プログラムのリンク

デフォルト時には、XL Fortran プログラムのリンクで特別に行うべきことは何もありません。リンカーが自動的に実行されて、実行可能出力ファイルを作成します。

xlf95 file1.f file2.o file3.f

リンクが終了したら、XL Fortran プログラムの実行の指示に従ってプログラムを実行してください。

別個のステップのコンパイルとリンク

後でリンクできるオブジェクト・ファイルを作成するには、-c オプションを使用します。

xlf95 -c file1.f               # Produce one object file
xlf95 -c file2.f file3.f       # Or multiple object files
xlf95 file1.o file2.o file3.o  # Link with appropriate libraries

コンパイラー呼び出しコマンドでリンカーを実行するのが最善な場合もあります。このコマンドは、余分な ld オプションおよびライブラリー名をリンカーに自動的に渡すからです。

ld コマンドを使用した 32 ビット SMP オブジェクト・ファイルのリンク

ld コマンドを使用して SMP プログラムにリンクするには、以下の指針に従ってください。

AIX バージョン 4.3 以降の場合、デフォルトの POSIX pthreads API は、1003.1-1996 標準です。mytest というプログラムがあって、 AIX バージョン 4.3 上の 1003.1-1996 標準 POSIX pthreads API の関数へアクセスしたい場合には、以下のコマンドと類似のコマンドを使用して、libpthreads.a ライブラリーとリンクすることができます。

ld -bh:4 -bpT:0x10000000 -bpD:0x20000000 /lib/crt0_r.o mytest.o -lxlf90_r
   -lxlf -lxlsmp -lm_r -lm -lc_r -lc -lpthreads -o mytest

1003.1-1996 標準と Draft 7 とは、完全に互換性があるわけではありません。 Draft 7 インターフェースを必要とするプログラムがある場合には、 libpthreads_compat.a および libxlfpthrds_compat.a ライブラリー (互換性サポートを提供)、それから libpthreads.a ライブラリーと、プログラムをリンクします。たとえば、Draft 7 インターフェースを使用するために書かれた mytest というプログラムがある場合には、 AIX バージョン 4.3 で、以下のコマンドと類似のコマンドを使用することができます。

ld -bh:4 -bpT:0x10000000 -bpD:0x20000000 /lib/crt0_r.o mytest.o
   -lxlfpthrds_compat -lxlf90_r -lxlf -lxlsmp -lm_r -lm -lc_r -lc
   -lpthreads_compat -lpthreads -o mytest 

これらのデフォルト・ライブラリーおよびリンカー・オプションは、構成ファイル /etc/xlf.cfg にリストされます。 -# オプションを使用したサンプル・コンパイルを行うことにより、コンパイルがリンカーをどのように実行するかを正確に知ることができます。

リンカー・オプションの説明は、「AIX コマンド・リファレンス 」を参照してください。

ld コマンドを使用した 64 ビット SMP オブジェクト・ファイルのリンク

ld コマンドを使用して 64 ビットの SMP プログラムにリンクするには、以下の指針に従ってください。

たとえば、オブジェクト・ファイル smpfile1.osmpfile2.o をリンクするために、以下を指定することができます。

ld -bh:4 -bpT:0x10000000 -bpD:0x20000000 -b64 /lib/crt0_64.o -lxlf90
   -lxlsmp -lm -lc smpfile1.o smpfile2.o

これらのデフォルト・ライブラリーおよびリンカー・オプションは、構成ファイル /etc/xlf.cfg にリストされます。 -# オプションを使用したサンプル・コンパイルを行うことにより、コンパイルがリンカーをどのように実行するかを正確に知ることができます。

リンカー・オプションの説明は、「AIX コマンド・リファレンス 」を参照してください。

ld コマンドを使用した 32 ビット非 SMP オブジェクト・ファイルのリンク

ld コマンドを使用して、 32 ビット環境で SMP 以外のオブジェクト・ファイルにリンクするには、以下の指針に従ってください。

たとえば、オブジェクト・ファイル file1.ofile2.o をリンクするために以下を指定することができます。

  ld -bh:4 -bpT:0x10000000 -bpD:0x20000000 /lib/crt0.o -lxlf90 -lm -lc
     file1.o file2.o

これらのデフォルト・ライブラリーおよびリンカー・オプションは、構成ファイル /etc/xlf.cfg にリストされます。 -# オプションを使用したサンプル・コンパイルを行うことにより、コンパイルがリンカーをどのように実行するかを正確に知ることができます。

リンカー・オプションの説明は、「AIX コマンド・リファレンス 」を参照してください。

ld コマンドを使用した 64 ビット非 SMP オブジェクト・ファイルのリンク

ld コマンドを使用して、 64 ビット環境で SMP 以外のオブジェクト・ファイルにリンクするには、以下の指針に従ってください。

たとえば、オブジェクト・ファイル file1.ofile2.o をリンクするために以下を指定することができます。

  ld -bh:4 -bpT:0x10000000 -bpD:0x20000000 -b64 /lib/crt0_64.o -lxlf90 -lm
     -lc file1.o file2.o

これらのデフォルト・ライブラリーおよびリンカー・オプションは、構成ファイル /etc/xlf.cfg にリストされます。 -# オプションを使用したサンプル・コンパイルを行うことにより、コンパイルがリンカーをどのように実行するかを正確に知ることができます。

リンカー・オプションの説明は、「AIX コマンド・リファレンス 」を参照してください。

ld コマンドへのオプションの引き渡し

XL Fortran デフォルトの一部ではない ld オプションでリンクしなければならない場合は、それらのオプションをコンパイラー・コマンド行に入れることができます。

   xlf95 -bhalt:2 -K -r file.f # xlf95 passes all these options to ld

コンパイラーは、 -q オプション以外の認識されないオプションを ld コマンドに渡します。

リンク時のインターフェース・エラーの検査

-qextchk コンパイラー・オプションを指定すると、リンカーは、マッチしないプロシージャー・インターフェースまたは共通ブロック定義が含まれているオブジェクト・ファイルのリンクを拒絶することがあります。ユーザーはリンク時にこれらのエラーを見つけることができるため、間違った結果をデバッグすることはありません。

C の名前の大文字、または -qextname オプションによって後続の下線を追加したことが原因でいくつかの名前が解決しない場合、その未解決の名前とリンクの問題とを切り離すことができるならば、 -brename リンカー・オプションを使用して、それらの名前だけを変更することができます。

  xlf95 -brename:Old_Link_Name,new_link_name fort_prog.o c_prog.o
関連情報:
-qextchk オプション-U オプション、 および -qextname オプションを参照してください。

新しいオブジェクトと既存のオブジェクトのリンク

XL Fortran の初期バージョンでコンパイルされた .o またはその他のオブジェクト・ファイルを持っている場合は、以下の注に従って、それらを XL Fortran バージョン 8 でコンパイルされたオブジェクト・ファイルとリンクすることができます。 XL Fortran のメイン・ライブラリーは libxlf90.alibxlf90_r.a ですが、 libxlf.a 内の古いエントリー・ポイントを呼び出すことも依然として可能です。この呼び出しはメイン・ライブラリー内の新しいエントリー・ポイントに渡されて、その結果作成されたプログラムは、すべてを再コンパイルする場合よりも遅くなります。

注:

  1. XL Fortran libxlf.a ライブラリーは、オプション -lxlf を入れることによってリンク・ステップの一部として明示的に指定する必要があります。

  2. 安全のために、コンパイラー・コマンドの後に最初のオプションとして必ず -lxlf を入れて、ライブラリーがどのユーザー・オブジェクト・ファイルよりも先にリンクされるようにしてください。このようにすると、新しい I/O ルーチンが、静的にリンクされているオブジェクト・ファイル内の既存の I/O ルーチンをオーバーライドします。

  3. 古いオブジェクト・ファイルが再リンクされると、その結果作成されたプログラムの I/O ルーチンは XL Fortran バージョン 2 の動作とはある点で異なっています。その結果作成されたプログラムが予想どおりに機能するようにするために、 実行時オプションの設定に記載されている実行時設定 (特に namelist 設定) をいくつか変更するか、 -qxlf77 オプションでソース・ファイルを再コンパイルしなければならない場合もあります。変更された I/O 細部には、前の動作に切り替えることがまったくできないものもあります。

  4. IPA の XL Fortran バージョン 4 レベルでコンパイルしたファイルは、 IPA の XL Fortran バージョン 6 以降のレベルでコンパイルしたファイルとリンクすることはできません。

  5. XL Fortran バージョン 7.1.0.1 以前でコンパイルした 64 ビット・オブジェクトをリンクすることはできません。オブジェクト・フォーマットは、AIX バージョン 5.1 で変更されました。

  6. -qpdf1 と XL Fortran バージョン 5.1.0 以前のレベルを使用して作成した pdf ファイルは、-qpdf1 と XL Fortran バージョン 7.1 以降を使用して作成した pdf ファイルとリンクすることはできません。しかし、-qpdf2 と XL Fortran バージョン 7.1 以降を使用して作成したオブジェクト・ファイルは、 -qpdf2 とそれ以前のレベルの XL Fortran を使用して作成したオブジェクト・ファイルとリンクすることができます。

既存の実行可能ファイルの再リンク

リンカーは実行可能ファイルを入力として受け入れるため、既存の実行可能ファイルを更新済みのオブジェクト・ファイルとリンクすることができます。ただし、-qipa オプションを使用してすでにリンクされている実行可能ファイルを再リンクすることはできません。

いくつかのソース・ファイルから構成されているプログラムを持っていて、部分的な変更をいくつかのソース・ファイルに対して行うだけの場合は、必ずしも個々のファイルを再コンパイルする必要はありません。その代わりに、変更されたファイルのコンパイル時に、実行可能ファイルを最後の入力ファイルとして組み込むことができます。

  xlf95 -omansion front_door.f entry_hall.f parlor.f sitting_room.f \
    master_bath.f kitchen.f dining_room.f pantry.f utility_room.f
 
  vi kitchen.f # Fix problem in OVEN subroutine
 
  xlf95 -o newmansion kitchen.f mansion

2 回目にコンパイルしてリンクするファイルの数を制限すれば、コンパイル時間、ディスクのアクティビティー、メモリー使用量が減少します。

注:
この種のリンクが正しく行われないと、インターフェース・エラーおよびその他の問題が発生する可能性があるので、リンクを行った経験がない方は、このリンクは行わないでください。

動的リンクおよび静的リンク

XL Fortran を使用すれば、ご使用のプログラムは、動的リンクでも静的リンクでもオペレーティング・システム機能の利点を利用できるようになります。

注:
XL Fortran プログラムを XL Fortran メッセージ・カタログがないシステム上で実行した場合、実行時エラー・メッセージ (ほとんどは I/O 問題に関するもの) が正しく表示されず、プログラムはメッセージ番号を出しますが、それに関連したテキストは表示されません。この問題を回避するには、 XL Fortran メッセージ・カタログを /usr/lpp/xlf/bin/default_msg から、実行システムで設定された NLSPATH 環境変数の一部となっているディレクトリーへコピーします。

リンク中の命名競合の回避

実行時サブプログラムと同じ名前を持つ外部サブルーチン、外部関数、共通ブロックを定義すると、その名前の定義がその場所で使用されたり、リンク・エディット・エラーが発生する場合があります。

以下の一般的な解決方法を試行して、このような種類の名前の矛盾を回避するための参考にしてください。

-qextname オプションを使用しない場合は、 XL Fortran およびシステム・ライブラリー内の外部シンボルの名前との競合を回避するために、特別な予防措置をとる必要があります。

プログラムに実際のルーチンを定義せずに、サブルーチン名または関数名を使用することがないように注意してください。その名前がいずれかのライブラリーの名前と競合すると、プログラムはルーチンの間違ったバージョンを使用して、コンパイル時エラーまたはリンク時エラーを作成しない場合があります。

複数のライブラリー・ファイルまたはオブジェクト・ファイルにルーチンの別のバージョンがある場合は、使用したい特定のバージョンを使用するように注意してください。最初にコマンド行または構成ファイルに、正しいバージョンを持つファイルを指定してください。ファイルがライブラリーの場合は、最初にコマンド行に適切な -l オプションを指定してください。この手法は、同じ共用ライブラリー内のルーチン、または、ある共用ライブラリーから別の共用ライブラリーに明示的にインポートされたルーチン間の参照には適用されません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]