Разный результат компиляции кода на c++ на виртуальной машине с гостевой linux-системой под разными хост-системами (Ubuntu и Windows 10))

Собираю большой С++-проект на виртуальной машине (VirtualBox) со специализированным дистрибутивом Linux (Astra Linux 1.6). На одном из моих компьютеров эта виртуальная машина работает под управлением Windows 10, а на другом компьютере точно такая же виртуальная машина - под управлением Ubuntu 20.04.3 LTS. Программа, собранная на компьютере с Windows, прекрасно работает на обоих компьютерах. Тот же исходный код, собранный в идентичном окружении, но на компьютере с Ubuntu, при выполнении падает с ошибкой Illegal instruction на обоих компьютерах. Ошибка происходит при рекурсивном обращении к методу одного из моих классов уже на второй итерации. Просмотр стека на момент падения (использую valgrind) показывает, что при втором обращении к методу его адрес в стеке отличается на 1 байт от адреса первого обращения. У меня есть подозрение, что компилятор g++ пытается как-то использовать особенности хостовой машины, которые не работают при исполнении программы в данной виртуальной среде. Есть ли какие-нибудь опции компилятора, которые запретят ему такие попытки?


Ответы (0 шт):