我已经构建了一个依赖于多个Boost库的库(VC10)。 我想在多个应用程序中使用此库,其中每个应用程序都依赖于不同的Boost版本,我希望能够在不为每个Boost版本构建库的情况下执行此操作。
我使用BOOST_ALL_DYN_LINK以及使用BOOST_ALL_NO_LIB构建了我的库,但这两个库似乎都依赖于特定的Boost版本。
有人可以解释一下如何构建一个依赖于Boost的库,可以在不重新编译或重新链接库的情况下更新Boost版本吗?
答案 0 :(得分:1)
“有人可以解释一下如何构建一个依赖于Boost的库,在那里可以更新Boost版本而无需重新编译或重新链接库吗?”
我不认为这是可能的。任何数量的小更改(例如向类添加新数据成员)都需要重新编译才能在版本之间切换。只有当boost不会在版本之间改变任何此类细节时才有可能。
如果您无法遵循@jamesj关于坚持单个版本的建议,则命名空间可能会有所帮助。我会采用每个boost版本并对其进行修改,以便将boost作为顶级命名空间而不是boost_x_y_z,其中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.0namespace 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兼容。但是他们不会在没有重新编译的情况下利用新的boost版本。