「libboost」は静的ライブラリ(DLLを必要としない)であり、他のものは動的であると想定しています。
はい。
動的ライブラリを使用する場合、プロジェクトで DLL を強化する必要があるということですか?
はい。
最後に、Visual Studio に特定のライブラリを選択させるには、C/C++ プロジェクト設定 -> コード生成 -> ランタイム ライブラリに移動し、/MT、/MD などの間で変更しますか?
そうではありません。/MT またはその他の同様のオプションを設定すると、アプリケーションは対応するバージョンのランタイム ライブラリ (CRT など) のみを使用するようになります。この後、静的にのみリンクできるという意味ではありません。また、独自のプロジェクト固有の依存関係に対して何かを「選択」することもありません。
ブーストに静的ライブラリとしてリンクするか、DLL としてリンクするかは、Linker -> Input -> Additional Dependenciesで指定する .lib ファイル (libboostXXX または boostXXX) によって異なります。また、Linker -> General -> Additional Library Directoriesにアクセスして、boost/libs フォルダー (および場合によってはそのサブフォルダー) へのパスを追加して、追加する各ライブラリのフル パスを指定する必要がないようにする必要がある場合があります。依存関係。
ただし、常に (特に静的ライブラリを使用する場合)、メイン プロジェクトで選択した同じランタイムでビルドされたライブラリにリンクする必要があります。異なるランタイムを混在させようとすると、(システム ライブラリ内の) 二重定義されたシンボルなどに関して、非常に不可解なリンカ エラーが発生する可能性が高くなります。最悪の場合 (通常、STL オプションを変更するプリプロセッサ定義など、あまり目立たない設定の不一致が原因で)、リンカの障害には至らず、不明なランタイム クラッシュが発生します。ただし、Visual Studio 2010 以降では、(以前の VS バージョンと比較して) このような不一致を適切に検出できます。
別の問題として、ブースト ヘッダーの一部が#pragma commentを使用して、必要なライブラリを特定の名前で強制的にリンクしている可能性があります。これが問題であり、依存関係を手動で指定したい場合 (または実際にリンクする必要のないものを選択した場合) は、グローバル プリプロセッサ定義BOOST_ALL_NO_LIBをC/C++ -> Preprocessor -> Preprocessor Definitionsに追加できます。
また、プロジェクトにすべてのブースト ライブラリが本当に必要ですか? それらはたくさんあり、ほとんどは非常に特別なもののためのものです. 私の経験では、人々は通常、プロジェクト固有の目標のためにブーストの小さなサブセットのみを必要とします. 実際に使用するライブラリのヘッダーとその依存関係のみを含むこのようなサブセットを作成するには、BCP ユーティリティを使用できます。これにより、ブースト/ブーストフォルダーが大幅に削減される可能性があります。もちろん、使用しないライブラリのバイナリを削除することもできます。また、ブーストの汎用ライブラリのほとんどはヘッダーのみであるため、ライブラリへのリンクはまったく必要ないことに注意してください。