2

我在使用的一个 boost 组件中遇到了一些错误。稍微分析了一下问题,我发现不是我一个人,而且作者已经发布了一个修复,可以在 boost SVN 主干中找到。

如果我只想更新这个组件并重用已经构建的库,那么最好的方法是什么?该组件不仅仅是标题。

  • 编译器:带 SP1、TR1 的 MSVC 9
  • 操作系统:Vista
  • Boost:来自 BoostPro 计算的 1.39
  • 错误组件:Boost Wave
  • 错误:竞争条件。该错误已于今年 5 月修复,但据我所知,他们尚未将其包含在任何版本中。

到目前为止我做了什么:

  • wave子目录的svn结帐
  • 替换本地子目录
  • 现在我正在寻找一种方法来指定我只想构建wave

我有点厌倦了重建整个 boost 库。我不知道主干现在是否可以生产。

4

3 回答 3

2

这就是我最终做的事情:

  1. 首先,我检查了问题已修复的 wave lib 的版本 (53230)。将其与我的本地副本进行比较后,我发现了以下更改:

    -wave 重用了 boost.iterator 实现,而不是提供自己的实现

    - 更新了 flex_string 实现

    - 一个参考计数器是原子的。这应该是错误修复

  2. 然后我简单地将我的 boost/wave 目录替换为来自 SVN 的目录。我运行了 bootstrap.bat(如果使用 BoostPro,则必须从 boost 源 zip 中获取),然后运行 ​​bjam:

    bjam --build-directory=build toolset=msvc variant=debug|release link=static threading=multi runtime-link=shared --with-wave

    添加 --with-wave 只会构建 wave 及其依赖项。

  3. 此时我得到了编译错误:似乎 Spirit 也被更新了。我从 SVN 下载了 Spirit (53252) 并重新发出了 bjam 命令。

    该库构建得很干净,我将这两个库复制到了我的 boost lib 文件夹中。

完成这些步骤后,我重建了我的项目,崩溃的错误消失了。

于 2009-08-22T15:56:15.617 回答
1

最佳方法:通过修改存储库中的更改来构建补丁diff(例如,通过签出存储库的一部分并使用),然后使用(Unix 工具)svn diff将补丁应用于 Boost 安装中的文件。patch

这可能需要 Windows 上的类 Unix 控制台(例如 Cygwin)。或者,您也许可以利用 Windows SVN 客户端,例如 TortoiseSVN,但我不确定这是否允许在版本控制之外修补文件。

你说的是头库吗?如果没有,您还需要重建 Boost 库的那部分,不幸的是,我认为这与 BoostPro 的 Boost 安装程序不太兼容。

于 2009-08-22T14:35:23.673 回答
1

好吧,您可以检查日志并查看问题已修复的确切版本,仅区分 yhat 版本并手动应用补丁。

不建议你只更新一个组件,因为 boost 会大量重用自身,所以如果界面发生变化,你就会开始出现各种奇怪的行为。也许如果您指定组件和错误,我们可以进一步帮助您。

于 2009-08-22T14:40:20.917 回答