コンパイル処理中、コンパイラーは実行ファイルのビルド時にリンクする必要のあるスタティック・ライブラリーの LIBRARY_PATH 環境変数を読み取ります。ランタイム時に、実行ファイルは LD_LIBRARY_PATH 環境変数で参照されている動的ライブラリーにリンクされます。
ディレクトリー (例えば、/libs) を LIBRARY_PATH に追加する場合、次のいずれかを行います。
コマンドライン: prompt> export LIBRARY_PATH=/libs:$LIBRARY_PATH
スタートアップ・ファイル: export LIBRARY_PATH=/libs:$LIBRARY_PATH
file.cpp をコンパイルして mylib.a ライブラリーをリンクするには、次のコマンドを入力します。
// Linux*
[invocation] file.cpp mylib.a
[invocation] は icpx または dpcpp です。
ファイル名は、次の順番でリンカーに渡されます。
オブジェクト・ファイル
コマンドライン、応答ファイル、または設定ファイルのいずれかで指定されたオブジェクトまたはライブラリー
インテルの数学ライブラリー、libimf.a
デフォルトでは、インテル® oneAPI DPC++/C++ コンパイラーは、macOS* v10.8 では C++ 標準ライブラリー (libstdc++) の GNU* 実装を使用し、macOS* v10.9 では libc++ 実装を使用します。このデフォルト設定は、-stdlib オプションを使用して変更できます。
-stdlib=libc++ // libc++ に切り替える -stdlib=libstdc++ // libstdc++ に切り替える
dpcpp コンパイラーを使用して、その環境全体を source する場合、コンパイラー・ライブラリーへの正しいパスが設定されていれば、ほかのコンパイラーとのリンクは正しく動作します。このため、プログラムを DPC++ でコンパイルして、ほかのコンパイラー (例: gcc) とリンクすることができます。コンパイラー環境を source しないでこれを行おうとすると、libsycl.so やほかの内部ライブラリーで未定義の参照が発生してリンクに失敗します。
この問題を解決するには、LD_LIBRARY_PATH に次のパスを追加します。
<install_dir>/compiler/latest/linux/compiler/lib/intel64 <install_dir>/compiler/latest/linux/lib <install_dir>/compiler/latest/linux/lib/x64 <install_dir>/tbb/latest/lib/intel64/gcc4.8
環境変数 LIB には、セミコロンで区切られたディレクトリー・リストが含まれています。Microsoft* リンカーは、ライブラリー (.lib) ファイルを探すときに、このディレクトリーの中を検索します。コンパイラーはライブラリー名をリンカーへ指定しませんが、オブジェクト・ファイルにディレクティブを含めて、各オブジェクトとリンクするライブラリーを指定します。
応答ファイルと設定ファイルにライブラリー名を追加する方法については、「応答ファイルの使用」と「設定ファイルの使用」を参照してください。
コマンドラインでライブラリー名を指定するには、最初に、目的のライブラリーへのパスを環境変数 LIB に追加する必要があります。その後、次のコマンドを入力すると、file.cpp がコンパイルされ mylib.lib ライブラリーにリンクされます。
[invocation] file.cpp mylib.lib
[invocation] は icx (C++ ) または dpcpp-cl (DPC++) です。
インテル® コンパイラーの数学ライブラリーには、さまざまなインテル® プラットフォーム向けにパフォーマンスが最適化された実装が含まれています。デフォルトでは、ハードウェアに最適な実装がランタイムに選択されます。ライブラリーがマルチスレッド・コードをディスパッチすると、データ競合が発生することがあります。これは、特定のソフトウェア解析ツールで検出できます。しかし、スレッドが同じ CPUID を持つコア上で実行されている限り、これらのデータ競合は無害であり、問題にはなりません。