2012-04-30 7 views
3

複数のブーストライブラリーに依存するライブラリー(VC10)を構築しました。 各アプリケーションが異なるBoostバージョンに依存する複数のアプリケーションでこのライブラリを使用したいと思います。私はBoostバージョンごとにライブラリを構築することなくこれを行うことができます。ライブラリーのブーストバージョンを再リンクしないブーストライブラリーに依存する

私はBOOST_ALL_DYN_LINKとBOOST_ALL_NO_LIBを使用してライブラリを構築しましたが、これらのライブラリは両方とも特定のBoostバージョンに依存しているようです。

誰かが、ライブラリを再コンパイルしたり再リンクしたりせずにBoostバージョンをアップデートすることが可能なBoostに依存するライブラリをどのように構築できるか説明してください。

+0

[このスレッドをチェック](http://stackoverflow.com/q/4736877/220636)おそらくそれは役に立ちますか? – nabulke

+0

BOOST_ALL_DYN_LINKを使用すると(つまり、実行時にDLLをリンクする)、ターゲットシステムに異なるBOOSTバージョンが存在する可能性があるため、役立たないでしょう。正しいブーストライブラリを静的ライブラリに提供することも検討してください.Libプロジェクトにも静的にリンクされています。 – nabulke

+0

なぜ静的にリンクされたブースト版が優れているのですか? boostのバージョンAでライブラリThreadをboostで使用し、これを私のライブラリに静的にリンクします。その後、アプリケーションは、バージョンBを使用しているライブラリと一緒に、ブーストスレッドのバージョンBを使用します。これは問題を引き起こす可能性があるようです。 – UncleBlue

答えて

1

"誰かが、ライブラリを再コンパイルしたり再リンクしたりせずに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; 

新しいバージョンが登場すると、単一の定義を更新して再コンパイルするだけです。ライブラリの新しいバージョンは、以前のプログラムと互換性があります。しかし、再コンパイルせずに新しいブーストリリースを利用することはありません。