升级后gcc不再工作

hsm*_*ers 8 11.10 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.
Run Code Online (Sandbox Code Playgroud)

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

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

我已经完全把事情搞砸了。任何人都可以请指教吗?

小智 10

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


Jer*_*err 0

在全新的梦幻安装中,这对我来说效果很好。/usr/include/x86_64-linux-gnu/bits/predefs.h由libc6-dev包提供,也许安装不正确?

您可以使用以下命令“重新安装”该软件包:

sudo apt-get install --reinstall libc6-dev
Run Code Online (Sandbox Code Playgroud)

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

gcc --verbose -o hello hello.c
Run Code Online (Sandbox Code Playgroud)

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

    #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/包括

如果这不一样,我会说你的一些构建必需包之间存在版本不匹配。检查您是否拥有正确版本的 gcc 和 libc6-dev 软件包。现在在 oneiric 上,这些应该是:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 
Run Code Online (Sandbox Code Playgroud)