Что это за ошибка GCC в Linux, и как ее решить? gcc: внутренняя ошибка компилятора: недопустимая инструкция (программа как)

Я печатаю gcc hello.c и это появляется:

gcc: internal compiler error: Illegal instruction (program as)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.

hello.c это просто:

int main()
{
 return 0;
}

Я не могу придумать, как это сделать проще! (То же самое случилось с printf там.)

Итак: как вы это исправите? Я на Raspian, на Raspberry Pi.

редактировать

GCC-V дает

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Debian 4.6.3-14+rpi1' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 4.6.3 (Debian 4.6.3-14+rpi1) 

Нет, я не установил его.

Что касается обновлений, sudo apt-get install gcc дает

Reading package lists... Done
Building dependency tree       
Reading state information... Done
gcc is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Да, вы можете запустить asэто говорит Illegal instruction без аргументов.

Я понятия не имею, что такое пространство подкачки.

gcc -O0 -g hello.c выдает ту же ошибку.

GCC не распознает --enable-debug,

5 ответов

Решение

Понял! Я удалил gcc, установил gcc-4.7 и... ничего.

Я очистил конец gcc-4.6 и перезапустил sudo apt-get install gcc-4.7 и ничего.

Я обновил binutils и... это сработало!

Так, as обновление GCC, похоже, не было затронуто, но обновление более непосредственно сделало это для меня.

(Это было от 2.22-7.1 до 2.22-8, если это кому-нибудь поможет.)

Я могу только пролить свет на сообщение об ошибке:

gcc: внутренняя ошибка компилятора: недопустимая инструкция (программа как)

gcc делает несколько вещей при компиляции. Сначала он переводит вашу C-программу в ассемблер, а затем конвертирует ассемблер в машинный код.

Имя ассемблерной программы с gcc просто as, Таким образом, сообщение об ошибке говорит вам, что запустить ассемблер не удастся, потому что исполняемый файл ассемблера содержит недопустимую инструкцию.

Это может быть аппаратная ошибка, означающая, что исполнимый файл ассемблера поврежден.

Проверять:

  1. Есть ли gcc -S hello.c Работа? Это должно создать hello.s, содержащий код C, скомпилированный для ассемблера.
  2. Вы можете попробовать с gcc -v -c hello.c чтобы выяснить, что именно происходит.

Найдено на форумах raspberryPi:

Схватил исходники и попробовал кросс-компиляцию на x86-64-боксе для общей цели arm. Что-то внутри filter/hq2x.cpp заставляет GCC сходить с ума и использовать память и подкачку, поэтому я не удивлюсь, если это вызовет фатальную ошибку на Pi. Некоторые источники предполагают, что это переполнение внутреннего стека компилятора (cc1plus).

Одним из возможных исправлений является запуск скрипта configure с параметром --enable-debug. Это должно снизить оптимизацию до минимума и избежать переполнения стека за счет увеличения размера двоичного файла.

Таким образом, вы можете попробовать установить флаги компилятора в

-O0 -g

и проверьте, помогает ли это.

Получил похожую проблему.

Но это произошло после перемещения образа VirtualBox (с Xubuntu 16.04/gcc-5) с компьютера на базе Haswell на Sandy Bridge. Проблема была где-то в пакетах build-essential / gcc / binutils. Я переустанавливал их все (с помощью apt remove и apt install - не переустанавливал oneshot) - это помогло.

Попробуйте обновить компилятор и попробуйте

sudo apt-get install build-essential

Это может решить проблему.

Другие вопросы по тегам