什么是Linux这个GCC错误,以及如何解决呢? GCC:内部编译器错误:非法指令(如程序)(W

2019-09-02 22:56发布

I型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,在树莓派。

编辑

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

Answer 1:

得到它了! 我卸载了GCC,安装GCC-4.7,和什么都没有。

我清空了GCC-4.6的结束,重新运行sudo apt-get install gcc-4.7和什么都没有。

我更新的binutils和...它的工作!

因此, as没有出现通过更新GCC,但在更新它更直接地为我做的影响。

(这是从2.22-7.1到2.22-8,如果这能帮助任何人。)



Answer 2:

我只能洒在错误消息的一些光:

GCC:内部编译器错误:非法指令(如程序)

编译时GCC做几件事情。 它首先会将您的C程序成汇编,然后汇编程序转换成机器代码。

用gcc汇编程序的名称只是as 。 因此,错误信息告诉你,那运行汇编器出现故障,因为汇编器可执行文件包含非法指令。

这可能真的是一个硬件错误,这意味着汇编程序的可执行文件被破坏。

去检查:

  1. 请问gcc -S hello.c工作? 这应该创建一个“hello.s”包含C代码编译成汇编
  2. 你可能会尝试gcc -v -c hello.c找出到底发生了什么。


Answer 3:

发现树莓派论坛:

抓起源,并试图对一个x86-64的盒的横编译用于通用臂目标。 过滤器/ hq2x.cpp里面的东西是导致GCC去坚果和消耗内存和交换,因此如果它触发对皮一个致命的错误,我也不会感到惊讶。 一些消息来源表明,它是编译器(cc1plus)内部堆栈溢出。

一个可能的解决方法是用--enable-调试运行配置脚本 - 这应该减少优化到最低限度,并避免堆栈溢出的增加二进制文件的大小为代价的。

所以,你可以尝试设置编译器标志,以

-O0 -g

并检查它是否有帮助。



Answer 4:

得到了类似的问题。

但它发生的VirtualBox形象的举动后(用的Xubuntu 16.04 / GCC-5)基于Haswell的机器的Sandy Bridge。 问题是在某处的build-essential / GCC / binutils的包。 我重新安装了所有的人(与易拆卸和安装容易 - 无单稳重装) - 它帮助。



Answer 5:

尝试更新的编译器和尝试

sudo apt-get install build-essential

这可能会解决这个问题。



文章来源: What is this GCC error on Linux, and how do I solve it? gcc: internal compiler error: Illegal instruction (program as)