インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

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

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

Microsoft* Visual 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

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

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

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

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

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

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

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

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

libifcore.lib

libcmtd.lib

マルチスレッド

libifcoremt.lib

libcmt.lib

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

libifcoremt.lib

libcmtd.lib

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

libifcorertd.lib (libifcorertd.dll)

msvcrt.lib (msvcrt.dll)

マルチスレッド DLL

libifcoremd.lib (libifcoremd.dll)

msvcrt.lib (msvcrt.dll)

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

libifcoremdd.lib (libifcoremdd.dll)

msvcrt.lib (msvcrt.dll)

例えば、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 (いいえ)] に設定します。この設定を確認するには、[プロジェクト] > [プロパティ] > [Fortran] > [Libraries (ライブラリー)] を選択します。[Disable Default Library Search Rules (既定のライブラリー検索規則を無効にする)] を [Yes (はい)] に変更する場合は、Fortran 以外のプロジェクトへ必要なランタイム・ライブラリーを明示的に追加する必要があります。明示的にライブラリーを追加する場合、Fortran 以外のプロジェクトのライブラリーに IFCONSOL.LIB が追加されていることを確認してください。このライブラリーは、インテル® Visual Fortran でほぼすべての I/O を実行するのに必要です。

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

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

選択されるメニュー項目

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

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

マルチスレッド

/MTd

libcmt.lib

マルチスレッド DLL

/MD

msvcrt.lib (msvcrnn.dll)

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

/MTd

libcmtd.lib

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

/MDd

msvcrtd.lib (msvcrtd.dll)

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

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

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