インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
このトピックは、Linux* および macOS* にのみ適用されます。
共有ライブラリーは、ダイナミック・ライブラリーとも呼ばれ、スタティック・ライブラリーとは異なる形でリンクされます。ビルドの際、リンカーは必要なすべてのシンボルを実行ファイルにリンクするか、またはランタイム時に共有ライブラリーからリンクされるようにします。共有ライブラリーからコンパイルされた実行ファイルのサイズは小さくなりますが、実行ファイルが正常に動作するためには共有ライブラリーをインクルードする必要があります。複数のプログラムで同じ共有ライブラリーを使用している場合、ライブラリーの 1 つのコピーをロードするだけでかまいません。
Fortran のソースファイルから共有ライブラリーを作成するには、ifort コマンドを使用してファイルを処理します。
.so ファイルまたは .dylib ファイルを作成するには、-shared オプション (Linux*) または -dynamiclib オプション (macOS*) を指定しなければなりません。IA-32 またはインテル® 64 アーキテクチャー・ベースの Linux* および macOS* システムでは、共有ライブラリーに含める各オブジェクト・ファイルをコンパイルする際に -fpic オプションも指定する必要があります。
-ooutput オプションを指定して、出力ファイルに名前を付けることができます。
-c オプションを省略すると、コマンド行から直接、共有ライブラリー (.so ファイル) を単一ステップで作成できます。
-ooutput オプションを省略すると、コマンド行の最初の Fortran ファイルの名前が、.so ファイルのファイル名に使用されます。また、共有ライブラリー作成に関連付けられている追加オプションを指定できます。
-c オプションを指定すると、オブジェクト・ファイル (.o ファイル) を作成できます。このファイルは、-o オプションで名前を付けることができます。共有ライブラリーを作成するには、.o ファイルを ld と一緒に処理します。この際、共有ライブラリーの作成に関連付けられているオプションを指定します。
共有ライブラリーを作成する方法は複数あります。
ifort コマンドによる共有ライブラリー・ファイルの作成:
ifort -shared -fpic octagon.f90 (Linux*)
ifort -dynamiclib octagon.f90 (macOS*)
-shared オプションまたは -dynamiclib オプションは共有ライブラリーを作成するのに必要です。octagon.f90 はソースファイルの名前です。複数のソースファイルとオブジェクト・ファイルを指定できます。
-o オプションが省略されているため、共有ライブラリー・ファイルの名前は octagon.so (Linux*) または octagon.dylib (macOS*) になります。
-static-intel オプションを指定すると、リンカーはインテルが提供するライブラリーのスタティック・バージョンを使用します。
ifort と ld (Linux*) または libtool (macOS*) コマンドの組み合わせによる共有ライブラリー・ファイルの作成:
最初に .o ファイルを作成します。次の例では、octagon.o ファイルを作成します。
ifort -c -fpic octagon.f90
octagon.o ファイルを ld (Linux*) または libtool (macOS*) コマンドの入力として、共有ライブラリーを作成します。 次の例では、Linux* システム上で octagon.so という共有ライブラリーを作成するコマンドを示します。
ld -shared octagon.o \
-lifport -lifcoremt -limf -lm -lcxa \
-lpthread -lirc -lunwind -lc -lirc_s
次の点に注意してください。
ld を使用する際は、すべてのインテル® Fortran ライブラリーをリストする必要があります。ifort コマンドを使用すると、より簡単で安全です。macOS* では、libtool を使用します。
-shared オプションは共有ライブラリーを作成するのに必要です。macOS* システム上では、-dynamiclib オプションを使用し、-arch_only i386、-noall_load、および -weak_references_mismatches non-weak も指定します。
オブジェクト・ファイルの名前は octagon.o です。複数のオブジェクト (.o) ファイルを指定できます。
-lifport とそれに続くオプションは、ライブラリーの標準リストです。これは、ifort コマンドで、ld または libtool に渡すことになるリストです。共有ライブラリーを作成する場合、すべてのシンボルが解決される必要があります。
正しくライブラリーを指定するために、-dryrun コマンドの出力結果から、使用されるすべてのライブラリーを確認することを推奨します。
ifort コマンドを使用してリンクする場合は、-Qoption コマンドを使用してオプションを ld に渡します (ld コマンドラインで -Qoption は使用できません)。
関連するコンパイラー・オプションの詳細は、「コンパイラー・オプションの概要」を参照してください。
「ld(1)」リファレンス・ページも参照してください。
ld で共有ライブラリーを作成する場合、次の制約に注意してください。
共有ライブラリーをアーカイブ・ライブラリーにリンクすることはできません。
共有ライブラリーを作成する場合、外部参照を解決するために利用できるのは、ほかの共有ライブラリーだけです。アーカイブ・ライブラリーに存在するルーチンを参照する必要がある場合は、そのルーチンを個別の共有ライブラリーに入れるか、または作成する共有ライブラリーに含めます。共有ライブラリーの作成時には、複数のオブジェクト (.o) ファイルを指定できます。
ルーチンを個別の共有ライブラリーに入れるには、そのルーチンのソースファイルかオブジェクト・ファイルを入手して、必要に応じて再コンパイルし、個別の共有ライブラリーを作成します。ifort コマンドで再コンパイルする際、または ld コマンドで共有ライブラリーを作成する際に、オブジェクト・ファイルを指定することができます。
作成する共有ライブラリーにルーチンを含めるには、そのルーチン (ソースファイルまたはオブジェクト・ファイル) を共有ライブラリーを構成するほかのソースファイルと一緒に配置し、必要に応じて再コンパイルします。
次に、共有ライブラリーを作成しますが、再コンパイル時または共有ライブラリー作成時に、そのルーチンが含まれるファイルを指定します。ifort コマンドで再コンパイルする際、または ld コマンドまたは libtool コマンドで共有ライブラリーを作成する際に、オブジェクト・ファイルを指定することができます。
共有ライブラリーを作成する場合、すべてのシンボルが定義 (解決) されている必要があります。
共有ライブラリーの作成時には、すべてのシンボルが ld に対して定義されていなければならないため、ld コマンド行にインテル® Fortran の標準ライブラリーをすべて含む共有ライブラリーを指定する必要があります。インテル® Fortran の標準ライブラリーのリストは、-lstring オプションを使って指定することができます。
共有ライブラリーを作成したら、これを参照するプログラムを実行する前に、プライベートまたはシステム全体で使用するためにインストールする必要があります。
プライベート用の共有ライブラリーをインストールするには (テストを行う場合など)、LD_LIBRARY_PATH 環境変数を設定します。「ld(1)」を参照してください。macOS* システムでは、環境変数 DYLD_LIBRARY_PATH を設定します。
システム共通の共有ライブラリーをインストールするには、ld または libtool が使用する標準ディレクトリー・パスの 1 つに共有ライブラリー・ファイルを配置します。