インテル® MKL 2017 デベロッパー・ガイド
cdecl と stdcall の呼び出し規則は、呼び出し後のスタックの復元方法が異なります。インテル® MKL は、mkl_intel_c[_dll].lib およびmkl_intel_s[_dll].lib インターフェイス・ライブラリーにより、IA-32 アーキテクチャーの実装で両方の規則をサポートしています。以下の表で説明されているように、これらのライブラリーは異なるコンパイラーのデフォルトを仮定します。呼び出すプログラムに渡すパラメーターのリストの文字列長の位置も異なります。
スタティック・リンク用ライブラリー |
ダイナミック・リンク用ライブラリー |
呼び出し規則 |
パラメーター・リストの文字列長の位置 |
---|---|---|---|
mkl_intel_c.lib |
mkl_intel_c_dll.lib |
cdecl |
リストの最後 |
インテル® C++ コンパイラーおよびインテル® Fortran コンパイラーのデフォルト |
|||
mkl_intel_s.lib |
mkl_intel_s_dll.lib |
stdcall |
文字列アドレスの直後 |
Compaq* Visual Fortran (CVF) コンパイラーのデフォルト |
エラーを回避するため、呼び出すプログラムと呼び出されたプログラムが同じ呼び出し規則を使用していることを確認します。
cdecl または stdcall 呼び出し規則を使用するには、適切な呼び出し構文 (C アプリケーション) および適切なコンパイラー・オプション (Fortran アプリケーション) を使用します。
C コンパイラーを使用する場合、cdecl または stdcall インターフェイス・ライブラリーをリンクするには、以下の表で説明されているように、コードでインテル® MKL ルーチンを呼び出します。
インターフェイス・ライブラリー |
インテル® MKL ルーチンの呼び出し |
---|---|
mkl_intel_c[_dll].lib | 以下の宣言を使用します。 <型>名前 ( <プロトタイプ変数 1>, <プロトタイプ変数 2>, .. ); |
mkl_intel_s[_dll].lib |
以下のステートメントを使用してルーチンを呼び出します。 extern __stdcall name( <プロトタイプ変数 1>,<プロトタイプ変数 2>, .. ); |
Fortran コンパイラーを使用する場合、cdecl または stdcall インターフェイス・ライブラリーをリンクするには、以下の表で説明されているように、コンパイラー・オプションを指定します。
インターフェイス・ライブラリー |
コンパイラー・オプション |
内容 |
---|---|---|
インテル® Fortran コンパイラー |
||
mkl_intel_c[_dll].lib |
デフォルト |
|
mkl_intel_s[_dll].lib |
/Gm |
/Gm および /iface:cvf オプションは、CVF と Powerstation の呼び出し規則を互換にします。 |
CVF コンパイラー |
||
mkl_intel_s[_dll].lib |
デフォルト |
|
mkl_intel_c[_dll].lib |
/iface=(cref, nomixed_str_len_arg) |