"誰かが、ライブラリを再コンパイルしたり再リンクしたりせずにBoostバージョンを更新できるBoostに依存するライブラリをどのように構築できるか説明してください。
私はこれが可能ではないと思います。新しいデータメンバをクラスに追加するなどの小さな変更は、リリース間で切り替えるために再コンパイルする必要があります。ブーストがリリース間でこのような詳細を変更しない場合にのみ可能です。
@jamesjに従うことができない場合は、単一のバージョンに固執することをお勧めします。名前空間が役立つかもしれません。私はboost_x_y_zとなる最高レベルの名前空間としてのboostを持つ代わりに、それぞれのboost版を取り、それを修正するでしょう。ここでxyzはバージョン番号を与えます。
namespace boost_latest = boost_1_50_0;
:あなたはあなたがどこかのヘッダーに入れたかもしれません使用しているもののバージョンを気にしない場合は
namespace acc = boost_1_47_0::accumulators;
typedef acc::features<acc::tag::density> features_t;
typedef acc::accumulator_set<double, features_t> accumulator_t;
:だから、次のコード
namespace acc = boost::accumulators;
typedef acc::features<acc::tag::density> features_t;
typedef acc::accumulator_set<double, features_t> accumulator_t;
はとバージョン1.47.0をターゲットでした
私の例は次のようになります:
namespace acc = boost_latest::accumulators;
typedef acc::features<acc::tag::density> features_t;
typedef acc::accumulator_set<double, features_t> accumulator_t;
新しいバージョンが登場すると、単一の定義を更新して再コンパイルするだけです。ライブラリの新しいバージョンは、以前のプログラムと互換性があります。しかし、再コンパイルせずに新しいブーストリリースを利用することはありません。
[このスレッドをチェック](http://stackoverflow.com/q/4736877/220636)おそらくそれは役に立ちますか? – nabulke
BOOST_ALL_DYN_LINKを使用すると(つまり、実行時にDLLをリンクする)、ターゲットシステムに異なるBOOSTバージョンが存在する可能性があるため、役立たないでしょう。正しいブーストライブラリを静的ライブラリに提供することも検討してください.Libプロジェクトにも静的にリンクされています。 – nabulke
なぜ静的にリンクされたブースト版が優れているのですか? boostのバージョンAでライブラリThreadをboostで使用し、これを私のライブラリに静的にリンクします。その後、アプリケーションは、バージョンBを使用しているライブラリと一緒に、ブーストスレッドのバージョンBを使用します。これは問題を引き起こす可能性があるようです。 – UncleBlue