6

我输入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.

4

5 回答 5

3

知道了!我卸载了 gcc,安装了 gcc-4.7,然后……什么都没有。

我清除了 gcc-4.6 的结尾并重新运行sudo apt-get install gcc-4.7......什么也没有。

我更新了 binutils 并且......它工作了!

所以,as似乎没有受到更新 GCC 的影响,但更直接地更新它为我做了。

(如果对任何人有帮助的话,它是从 2.22-7.1 到 2.22-8。)

于 2013-05-17T16:05:05.357 回答
2

我只能对错误消息有所了解:

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

gcc 在编译时做了几件事。它首先将您的 C 程序转换为汇编程序,然后将汇编程序转换为机器代码。

带有 gcc 的汇编程序的名称只是as. 因此错误消息告诉您,运行汇编程序失败,因为汇编程序可执行文件包含非法指令。

这可能真的是硬件错误,这意味着汇编程序的可执行文件已损坏。

去检查:

  1. gcc -S hello.c行得通吗?这应该创建一个“hello.s”,其中包含编译为汇编器的 C 代码
  2. 您可以尝试gcc -v -c hello.c找出到底发生了什么。
于 2013-05-13T20:14:10.640 回答
1

在树莓派论坛上找到:

获取源代码并尝试在 x86-64 机器上为通用 arm 目标进行交叉编译。filter/hq2x.cpp 中的某些东西导致 GCC 发疯并消耗内存和交换,所以如果它在 Pi 上触发致命错误,我一点也不感到惊讶。一些消息来源表明这是编译器(cc1plus)的内部堆栈溢出。

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

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

-O0 -g

并检查它是否有帮助。

于 2013-05-13T16:23:39.933 回答
1

遇到了类似的问题。

但这发生在将 VirtualBox 映像(使用 Xubuntu 16.04/gcc-5)从基于 Haswell 的机器移动到 Sandy Bridge 之后。问题出在 build-essential / gcc / binutils 包中。我重新安装了所有这些(使用 apt remove 和 apt install - 没有重新安装) - 它有帮助。

于 2017-09-14T19:56:23.390 回答
0

尝试更新编译器并尝试

sudo apt-get install build-essential

那可能会解决问题。

于 2013-05-13T16:18:28.030 回答