Что это за ошибка 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.

Здравствуйте.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: внутренняя ошибка компилятора: Незаконная инструкция (программа as)

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

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

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

проверка:

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

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

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

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

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

-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

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