Boost 1.65.1 中可能存在的错误。在运行 bootstrap.bat gcc 时

Posted

技术标签:

【中文标题】Boost 1.65.1 中可能存在的错误。在运行 bootstrap.bat gcc 时【英文标题】:Possible bug in Boost 1.65.1. while running bootstrap.bat gcc 【发布时间】:2017-10-09 01:12:08 【问题描述】:

在解压后运行bootstrap.bat gcc 时,bootstrap.log 出现下一个错误:

...
 \boost_1_65_1\tools\build\src\engine>.\bootstrap\jam0 -f build.jam
 --toolset=gcc "--toolset-root= "   
 ...found 161 targets... 
 ...updating 3 targets... 
 [MKDIR] bin.ntx86_64 
 [COMPILE] bin.ntx86_64\b2.exe
 debugger.c: In function 'debug_start_child': 
 debugger.c:1128:5: error:
 'for' loop initial declarations are only allowed in C99 mode
      for ( int i = 1; i < argc; ++i )
      ^
 debugger.c:1128:5: note: use option -std=c99 or -std=gnu99 to compile your code 
 strings.c: In function 'string_rtrim':
 strings.c:195:5: warning: ISO C90 forbids mixed declarations and code
 [-Wpedantic]
      char * p = self->value + self->size - 1;
      ^
 ...

修改boost_1_65_1\tools\build\src\engine\debugger.c:1128 我得到了正确的构建。

我将编译命令跟踪到boost_1_65_1\tools\build\src\engine\config_toolset.bat:204。所以通过添加--std=c99我也可以解决它(虽然我得到警告并且编译失败)。

我在https://svn.boost.org/trac10/search?ticket=on 没有找到报告。

有更多经验的人可以证实这一点吗?如有必要,请报告。

Windows 10 - 64 位。 Mingw-w64 (gcc 4.8.3)。 提升 1.65.1。

【问题讨论】:

Boost 是一个 C++ 的东西,你可能不应该尝试在 any中使用 C 编译器来编译它> 模式:-) 你是对的。但是我添加了 gcc 选项,因为这个 Windows 入门 (boost.org/doc/libs/1_62_0/more/getting_started/windows.html) 和这个 (gist.github.com/sim642/29caef3cc8afaa273ce6)。 gcc 工具集适用于 MinGW 和 Cygwin。 当前的 C 标准是 ISO/IEC 9899:2011,因此请尝试 --std=c11 作为代码的 C 部分。如果可行,您可以提交构建脚本已损坏/旧的错误。 【参考方案1】:

有一个针对这个问题的错误报告:https://svn.boost.org/trac10/ticket/13252

我没有提交它,但现在如果有人遇到这个问题并想知道它是否被报告过,它已经被报告了。

在解决此问题的同时,我认为最简单的解决方法是按照上面黑箭头的建议,转到文件:boost_1_65_1\tools\build\src\engine\debugger.c,第 1128 行,然后更改:

for ( int i = 1; i < argc; ++i )

到:

int i;
for ( i = 1; i < argc; ++i )

保存,然后运行bootsrtap gcc

【讨论】:

我完全忘记了这一点。我提交了,我正在等待答复。谢谢,应该有参考。

以上是关于Boost 1.65.1 中可能存在的错误。在运行 bootstrap.bat gcc 时的主要内容,如果未能解决你的问题,请参考以下文章

几个调试错误

错误系统:9:错误的文件描述符(BOOST::FileSystem)

如何删除安装在 ubuntu 18.04 上的 boost

Boost:是不是有可能启动一个进程并在其中运行一个函数?

从 boost::process 到 boost::child 的信号传播

处理 boost 端点监听/运行错误