首页 > 解决方案 > 相同的 gcc 编译器版本给出不同机器中与 std 命名空间相关的不同编译结果

问题描述

我们有 3 台带有精确操作系统、cmake 和编译器环境的 linux CI 机器。操作系统是 ubuntu 18.04 LTS、cmake 3.10.2 和 GCC 7.5

有一个 C++ 代码库,其中有几个 .hpp 文件缺少std::名称空间前缀 ex。对于字符串、cout、endl 等。也有少数 .hpp 文件具有广泛的命名空间使用,即using namespace std,这被认为是不好的做法,我们将一一删除。然而,代码在其中一台 CI 机器上编译成功,但在其他两台机器上编译失败。即使在出现编译错误的机器上,错误也与不同的 hpp 文件有关。

当编译环境相同时,什么会导致编译器在不同的 CI 机器上给出不同的结果?可能是并行编译或计时或 *.hpp 文件的解析顺序在某些文件中使用 std 命名空间会影响构建结果。相同的机器总是提供相同的结果,因为我们从头开始测试了数十个干净的构建。

标签: c++linuxgccnamespaces

解决方案


推荐阅读