升级后 gcc 不再起作用

升级后 gcc 不再起作用

举个例子:

hsmyers@ubuntu:~/c_dev$ cat hello.c
#include <stdio.h>

int main(int argc,char **argv) {
printf("Hello World!\n");
return 0;
}
hsmyers@ubuntu:~/c_dev$ gcc -c -o hello.o hello.c
In file included from /usr/include/stdio.h:28:0,
             from hello.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.

在尝试修复错误消息之后的某个地方猜测:

/usr/bin/ld:找不到 crt1.o:没有此文件或目录

我把事情搞得一团糟。有人能给我一些建议吗?

答案1

您需要安装gcc-multilib将 32 位特定标头带入 64 位操作系统的软件包。

答案2

对于我来说,在全新安装的 oneiric 上,这很好用。/usr/include/x86_64-linux-gnu/bits/predefs.h是由 libc6-dev 包提供的,也许没有正确安装?

您可以使用以下方式“重新安装”该包:

sudo apt-get install --reinstall libc6-dev

但是,如果该文件存在,则说明您的编译器的搜索路径似乎没有在正确的位置查找该文件。您可以通过运行以下命令进行检查:

gcc --verbose -o hello hello.c

它应该打印包含文件的搜索路径。我的是:

    #include <...> 搜索从这里开始:
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     /usr/local/包含
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     /usr/include/x86_64-linux-gnu
     /usr/include

如果不一致,我会说您的一些 build-essential 软件包之间存在版本不匹配。请检查您是否拥有正确版本的 gcc 和 libc6-dev 软件包。目前在 oneiric 上,这些应该是:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 

答案3

我的 avr-gcc 编译器也遇到了同样的问题。

我将 /usr/include/i386-linux-gnu/ 中的文件和文件夹链接到 avr-gcc 搜索 -files 的文件夹。例如:/usr/lib/avr/include/

ln -s /usr/include/i386-linux-gnu/* /usr/lib/avr/include/

也许 gcc 也有类似的功能。

相关内容