У нас есть 3 linux CI-машин с точными ОС, cmake и средами компилятора. ОС - ubuntu 18.04 LTS, cmake 3.10.2 и G CC 7.5
Существует база кода C ++, в которой отсутствуют несколько файлов .hpp std::
префикс пространства имен ex. для строки, cout, endl и т. д. c. Есть также несколько файлов .hpp с широким пространством имен, например using namespace std
, что считается плохой практикой, и мы удаляем их один за другим. Однако код успешно компилируется на одной из машин CI, но не работает на двух других. Даже на машинах, где видны ошибки компиляции, ошибки связаны с разными файлами hpp.
Что может привести к тому, что компилятор будет давать разные результаты на разных машинах CI, если среда компиляции одинакова? Может ли это быть параллельная компиляция или синхронизация, или порядок анализа файлов * .hpp, что использование пространства имен std в некоторых файлах влияет на результат сборки. Одни и те же машины всегда дают одни и те же результаты, которые мы тестировали с десятками чистых сборок с нуля.