MS Visual C++ 2010の場合
私のソリューションには、ブーストを使用して完全に機能する単一のC++プロジェクトがありました。
次に、このプロジェクトを静的ライブラリに変換し、この静的ライブラリに依存する新しいプロジェクトを作成することにしました。
ここで、変換された静的ライブラリはエラーや警告(コンパイラーとリンカー)なしでビルドされますが、新しいプロジェクトはコンパイルされますがリンクされません。
私は得ています:
1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_45.lib'
テストとして、このライブラリのリンカオプションに完全なディレクトリパスを追加しました...
1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_45.lib'
これで、すべてのライブラリへの完全なパスが追加され、ビルドおよび実行されます。
私はこの解決策に満足していません。
答えはDLLを作成することですが、静的にこれを行い、静的ライブラリレベルでリンクを維持する方法はあります。
編集:
ブーストライブラリを明示的に無視するように.exeリンカーに指示した場合、.exeがブーストについてまったく心配する必要がないことを除いて、問題ありません。
/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"
どうやら.libsは必要ありません。exeもリンクなしでリンクするからです。ブーストヘッダーのみのメソッドとクラスを使用しているようです。プロジェクトでプリプロセッサシンボルBOOST_ALL_NO_LIBを定義して、自動リンクを無効にするようにboostに指示するだけです。
すべてのboostを含めることで.libを不必要に大きくしたい場合、この質問は答えを持っているようです(私は実際には自分で試したことはありません)。 静的ライブラリを他の静的ライブラリにリンクする
ライブラリを構築するときに、boostライブラリを含めることができます。そのためには、VisualStudioのLibrarian > General
プロパティページで、ブーストライブラリをAdditional Dependencies
としてリストします。
ただし、クライアントがboost自体を使用し、静的にそれにリンクする場合(特に、使用しているバージョンとは異なるバージョン)、問題が発生する可能性があります。
ブーストライブラリをビルドしましたか?コンパイルする必要があるBoostの特定のライブラリがあります。まだ行っていない場合は、Boostライブラリのビルド方法を「 Windowsで始める 」を参照してください。
EDIT-1:Boostは、静的ライブラリと動的にロード可能な(dll)ライブラリの両方として構築できます。
EDIT-2:すでにBoostを構築している場合は、@ Daniel Gehrigerの回答で、VSに追加する方法を説明しています。