gpt4 book ai didi

c++ - 在不重新链接的情况下更新依赖于 Boost 库的库的 Boost 版本

转载 作者:太空狗 更新时间:2023-10-29 23:08:11 27 4
gpt4 key购买 nike

我构建了一个依赖于多个 Boost 库的库 (VC10)。我想在多个应用程序中使用这个库,其中每个应用程序都依赖于不同的 Boost 版本,我希望能够在不为每个 Boost 版本构建库的情况下做到这一点。

我已经使用 BOOST_ALL_DYN_LINK 和 BOOST_ALL_NO_LIB 构建了我的库,但这两个库似乎都依赖于特定的 Boost 版本。

有人可以解释一下我如何构建一个依赖于 Boost 的库,这样就可以在不重新编译或重新链接库的情况下更新 Boost 版本吗?

最佳答案

“有人可以解释一下我如何构建一个依赖于 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.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 兼容。但他们不会在不重新编译的情况下利用新的 boost 版本。

关于c++ - 在不重新链接的情况下更新依赖于 Boost 库的库的 Boost 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com