3

複数のBoostライブラリに依存するライブラリ(VC10)を構築しました。このライブラリを複数のアプリケーションで使用したいと思います。各アプリケーションは異なるBoostバージョンに依存しており、Boostバージョンごとにライブラリを構築せずにこれを実行できるようにしたいと思います。

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

ライブラリを再コンパイルまたは再リンクせずにBoostバージョンを更新できる、Boostに依存するライブラリを構築する方法を誰かに説明してもらえますか?

4

1 に答える 1

1

「ライブラリを再コンパイルまたは再リンクせずに Boost バージョンを更新できる、Boost に依存するライブラリを構築する方法を誰か説明してもらえますか?」

これが可能だとは思いません。クラスに新しいデータ メンバーを追加するなど、小さな変更を何度でも行うと、リリースを切り替えるために再コンパイルが必要になります。ブーストがリリース間でそのような詳細を変更しない場合にのみ可能です。

単一のバージョンに固執するという @jamesj の提案に従うことができない場合は、名前空間が役立つ場合があります。各ブースト バージョンを取得して修正し、トップ レベルの名前空間としてブーストを使用する代わりに、xyz がバージョン番号を示す boost_x_y_z になります。したがって、次のコード

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_1_47_0::accumulators;
typedef acc::features<acc::tag::density> features_t;
typedef acc::accumulator_set<double, features_t> accumulator_t;

使用するバージョンを気にしない場合は、どこかにヘッダーを追加できます。

namespace boost_latest = boost_1_50_0;

したがって、私の例は次のようになります。

namespace acc = boost_latest::accumulators;
typedef acc::features<acc::tag::density> features_t;
typedef acc::accumulator_set<double, features_t> accumulator_t;

その後、新しいバージョンが登場したら、単一の定義を更新して再コンパイルするだけです。ライブラリの新しいバージョンは、古いプログラムとの ABI 互換性を維持する必要があります。ただし、再コンパイルしないと、新しいブースト リリースを利用することはできません。

于 2012-07-06T05:33:46.060 に答える