该错误无法重现,因此很可能是硬件或操作系统问题

该错误无法重现,因此很可能是硬件或操作系统问题

我正在尝试在一台服务器上安装 Samba 4.0.9,但每次都出现此错误。我尝试了从apt-get -f install编辑/var/lib/dpkg/status Package: Samba4 Install ok installed

这是我收到的错误:

[ 866/3792] Compiling source4/dsdb/common/util.c
[ 867/3792] Compiling source4/dsdb/common/util_groups.c
In file included from ../lib/replace/system/time.h:30:0,
                 from ../source4/include/includes.h:33,
                 from ../source4/dsdb/common/util_groups.c:22:
/usr/include/i386-linux-gnu/sys/time.h:61:3: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
The bug is not reproducible, so it is likely a hardware or OS problem.
Waf: Leaving directory `/samba/bin'
Build failed:  -> task failed (err #1): 
    {task: cc util_groups.c -> util_groups_6.o}
make: *** [all] Error 1

如果需要更多信息,我会提供给您。提前谢谢。

答案1

当 debian gcc 遇到内部错误时,它会尝试再次通过编译核心运行代码。如果每次都得到相同的结果,它会认为这确实是编译器核心中的错误。如果没有,那么您会收到“该错误无法重现,因此可能是硬件或操作系统问题。”消息。

这可能是由对某些外部因素敏感的编译器核心中的错误、内核中的错误或不可靠的硬件引起的。

答案2

如果您正在运行一个构建系统,该系统在多核机器上并行执行一些构建步骤,并且其中一个步骤需要另一个步骤的输出,但构建系统不知道这一点,您也可能会看到此消息。

例如:

  • 步骤 1:生成步骤 2 使用的头文件

  • 步骤2:运行gcc编译包含步骤1中的头文件的.c文件。

如果构建系统不知道步骤 2 依赖于步骤 1 的输出,那么它可能会尝试利用它有多个 CPU 核心可用这一事实,同时运行两个步骤。在这种情况下,步骤 2 将失败,因为它所需的头文件尚未生成。失败时,gcc 会重试编译,但此时,步骤 1 已完成并且头文件可用。因此,第二次尝试成功,并且 gcc 认为不一致的结果意味着操作系统或硬件在某种程度上出现故障,即使它们运行正常。

这是多线程竞争条件的一个很好的例子,当在更复杂的场景中发现时(例如像 Samba 这样的大型项目的构建系统),这种情况可能是非常不可预测的。

我在另一个项目中使用忍者构建系统亲身经历了这一点。

解决该问题的方法是确保您的构建脚本使构建系统了解步骤之间的依赖关系。

相关内容