Windows* システムでのインテル® Fortran/C が混在したプログラムのビルド

Fortran と C の間の呼び出し、命名、および引数渡しの規則を理解し、調整したら、アプリケーションをビルドすることができます。

Visual C/C++* またはインテル® C/C++ を使用している場合、Microsoft* 統合開発環境内でコードの編集、コンパイル、デバッグを行うことができます。別の C コンパイラーを使用している場合、その統合開発環境内でコードの編集を行うことができます。ただし、コードは統合開発環境の外でコンパイルし、Fortran/C プログラムをコマンドラインでビルドするか、コンパイル済みの C .OBJ ファイルを Microsoft IDE の Fortran プロジェクトに追加する必要があります。

コマンドラインからのビルドの例として、FORSUBS.F90 に含まれている Fortran サブルーチンを呼び出す C のメインプログラム CMAIN.C がある場合、CMAIN アプリケーションを次のコマンドで作成することができます。

icl /c cmain.c
ifort cmain.obj forsubs.f90

インテル® Fortran は、C で記述され、C コンパイラーによりコンパイルされたメインプログラムのオブジェクト・ファイルを受け付けます。インテル® Visual Fortran コンパイラーは .F90 ファイルをコンパイルし、リンカーが 2 つのオブジェクト・ファイルを使用して CMAIN.EXE という名前の実行ファイルを作成します。

メインプログラムの言語に関係なく、どちらのコンパイラー (C または Fortran) でもリンクすることができます。ただし、先に Fortran コンパイラーを使用する場合、C コンパイラーで LIBIFCORE.LIB および IFCONSOL.LIB をインクルードしなければなりません。またこの際、C コンパイラーで使用される LIBC.LIB のバージョンによって何らかの問題が生じる可能性があります。これらの理由から、先に C コンパイラーを使用するか、または Fortran および C プロジェクトの設定で、アプリケーションが 1 つの C ライブラリーだけにリンクするように、同じ C ライブラリー指定します。

IDE で Fortran アプリケーションをビルドする場合、[Project (プロジェクト)] > [Properties (プロパティ)] ([Property Pages (プロパティ ページ)] ダイアログボックス) の [Fortran] カテゴリーで、使用する Fortran ライブラリーと C ライブラリーを指定できます。また、[Property Pages (プロパティ ページ)] ダイアログボックスの [Linker (リンカー)] カテゴリーで、リンカー設定を指定することもできます。

[Fortran] > [Libraries (ライブラリー)] の [RunTime Library (ランタイム・ライブラリー)] の設定により、選択されるライブラリーが決定されます。

ランタイム・ライブラリー

使用される Fortran リンク・ライブラリー

使用される C リンク・ライブラリー

シングルスレッド

libifcore.lib

libc.lib

デバッグ用シングルスレッド

libifcore.lib

libcd.lib

マルチスレッド

libifcoremt.lib

libcmt.lib

デバッグ用マルチスレッド

libifcoremt.lib

libcmtd.lib

シングルスレッド DLL

libifcorert.lib (libifcorert.dll)

msvcrt.lib (msvcrt.dll)

デバッグ用シングルスレッド DLL

libifcorertd.lib (libifcorertd.dll)

msvcrt.lib (msvcrt.dll)

マルチスレッド DLL

libifcoremd.lib (plibifcoremd.dll)

msvcrt.lib (msvcrt.dll)

デバッグ用マルチスレッド DLL

libifcoremdd.lib (libifcoremdd.dll)

msvcrt.lib (msvcrt.dll)

例えば、スタティック (/libs:static)、シングルスレッド (/nothreads)、非デバッグ (/nodbglibs) のライブラリー (Fortran ライブラリーの libifcore.lib と C/C++ ライブラリーの libc.lib) とリンクするには、[Fortran] > [Libraries (ライブラリー)] > [Run-time Library (ランタイム・ライブラリー)] でシングルスレッドのアイテムを選択します。

DLL (/libs:DLL)、マルチスレッド (/threads)、デバッグ (/dbglibs) のライブラリー (Fortran インポート・ライブラリーの libifcoremdd.lib とその DLL の libifcoremdd.dll および C/C++ インポート・ライブラリーの msvcrtd.lib とその DLL の msvcrtd.dll) とリンクするには、[Run-time Library (ランタイム・ライブラリー)] リストでデバッグ用マルチスレッド DLL を選択します。

Fortran ライブラリー・プロジェクトを含む言語が混在したソリューションでは、IDE で [Disable Default Library Search Rules (既定のライブラリー検索規則を無効にする)] を [No (いいえ)] に設定します。この設定を確認するには、[Project (プロジェクト)] > [Properties (プロパティ)] > [Libraries (ライブラリー)] を選択します。[Disable Default Library Search Rules (既定のライブラリー検索規則を無効にする)] を [Yes (はい)] に変更する場合は、Fortran 以外のプロジェクトへ必要なランタイム・ライブラリーを明示的に追加する必要があります。明示的にライブラリーを追加する場合、Fortran 以外のプロジェクトのライブラリーに IFCONSOL.LIB が追加されていることを確認してください。このライブラリーは、インテル® Fortran でほぼすべての I/O を実行するのに必要です。

C++ メインプログラムと Fortran ライブラリー・サブルーチンの場合、インテル® Fortran の LIB フォルダーに手動でライブラリー・パスを追加する必要があります。これは、ユーザーごとに 1 度だけ行います。パスを追加するには、[Tools (ツール)] > [Options (オプション)] > [Projects and Solutions (プロジェクトおよびソリューション)] > [VC++ Directories (Visual C++ ディレクトリ)] を選択します。[Show directories for: (ディレクトリを表示するプロジェクト):] ドロップダウンから、[Library files (ライブラリ ファイル)] を選択します。表示されるリストに、パスを追加します。

Visual C++ の場合は、[Project (プロジェクト)] > [Properties (プロパティ)] の [C/C++] で、使用するライブラリーを指定できます。[Code Generation (コード生成)] > [Run-time library (ランタイム・ライブラリー)] には、次の C ライブラリーがリストされます。

選択されるメニュー項目

有効にされる CL オプションまたはプロジェクトの種類

オブジェクト・ファイルで指定されるデフォルト・ライブラリー

シングルスレッド

/ML

libc.lib

マルチスレッド

/MT

libcmt.lib

マルチスレッド DLL

/MD

msvcrt.lib (msvcrt.dll)

デバッグ用シングルスレッド

/MLd

libcd.lib

デバッグ用マルチスレッド

/MTd

libcmtd.lib

デバッグ用マルチスレッド DLL

/MDd

msvcrtd.lib (msvcrtd.dll)

Fortran プロジェクトと C プロジェクトの両方で、必ず同じ種類のランタイム・ライブラリーを選択してください。例えば、Fortran プロジェクトでマルチスレッド DLL を選択した場合は、C プロジェクトでもマルチスレッド DLL を選択しなければなりません。そうしないと、Fortran と C が混在したアプリケーションをビルドする際、未定義のシンボル、重複したシンボルに関するリンク・エラーが発生します。

Microsoft Visual C/C++ またはインテル® C/C++ を使用している場合、特殊な宣言子を使用したり、特別なステップを踏まなくても、Microsoft 統合開発環境で Fortran/C のアプリケーションをビルドできます。C プログラムと Fortran プログラムを言語に応じた構文の色分けで編集し、参照することができます。Fortran ソースファイルは Fortran プロジェクトに、C/C++ ファイルは Visual C++ プロジェクトに配置する必要があります。

Visual C と Fortran が混在したアプリケーションをデバッグする際、デバッガーはデバッグ過程でコードの形式に自動的に対応します。C または Fortran の式エバリュエーターがデバッグ対象のコードに基づいて選択され、[Call Stack (呼び出し履歴)] ウィンドウに、Fortran プロシージャーに対しては Fortran データ型、C プロシージャーに対しては C データ型が表示されます。

出力を行う Fortran サブプログラムを呼び出している間に C++ プログラムから出力を行うと、出力の順序は期待どおりにならないことがあります。C++ では、出力バッファーの内容はすぐには書き込まれず、バッファーが満たされたとき、I/O ストリームが閉じたとき、またはプログラムが正常に終了したときに書き込まれます。このとき、バッファーは「フラッシュ」されたといいます。

C++ と Fortran のプログラムユニットに、期待どおりの出力を行わせるには、出力コマンドの後に、flushall、fflush、fclose、setbuf、または setvbuf C++ のライブラリー呼び出しを使用して、C++ バッファーを明示的にフラッシュさせてください。


このヘルプトピックについてのフィードバックを送信

© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。