現在、外部のダイナミックライブラリにリンクされていないC++のプロジェクトがあります。将来、ビルドする必要のあるいくつかのBoostライブラリを使用することを考えています(ヘッダーのみではありません)。今のところ、開発の段階で、3つの異なるツールチェーンを使用してプロジェクトを構築します。 g++
、、LLVM/Clang++
およびIntel C++
、プラットフォームはLinux
です。これらのコンパイラ、AFAIKは、相互にバイナリ互換です。たとえば、g++でコンパイルされたアプリはIntelC++でコンパイルされたダイナミックライブラリを使用できます。
ブーストバイナリを作成し、別のフォルダにインストールしました。例build_gcc
、build_icc
。次に、これらのフォルダへのパスをシステムに追加しましたLIBRARY_PATH
。問題は、プロジェクトをg++
またはでビルドし、Intel C++
ダイナミックライブラリをリンクする場合です。
-lboost_math_tr1
で、makefile
リンカは、異なるコンパイラのバイナリが相互に互換性がある場合に、リンクする正確なライブラリファイルをどのように決定しますか?
質問の動機は単純です。最適化コンパイラであるため、それを使用してビルドする場合、。でコンパイルされたものではなく、コンパイラでIntel C++
コンパイルされたダイナミックライブラリに対してリンクされることを期待します。もちろん、で複数の条件ステートメントを使用して、使用するツールチェーンごとにライブラリバイナリを含む正確なディレクトリを設定できることは知っていますが、少し不便です。私はさまよっています、リンカーはそれが使用すべき正確な共有ライブラリファイルを認識するのに十分賢いですか、それとも単にシステムで最初に見つかったものを使用しますか?Intel C++
g++
makefile
LIBRARY_PATH