升级后gcc不再起作用


8

举个例子:

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:没有这样的文件或目录

我把事情彻底弄糟了。有人可以建议吗?


您已经安装了libc-dev吗?对我来说编译很好。
itnet7 2011年

Answers:


10

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


0

在全新的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 / include
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / usr / include / x86_64-linux-gnu
     / usr / include

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

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

--verbose尝试的结果是:
hsmyers

我如何回答答案?最低限度,我的GCC版本是4.7.0,列为实验版本。我不知道它是如何安装的。据我所知,已经安装了libc6-dev。我的包含路径类似于:/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include(也为/ include-fixed),以及标准的/ usr / local / include。我找不到位作为目录,也找不到其中的bits / predefs.h。我将尝试重新安装,看看会发生什么。
hsmyers 2011年

重新安装没有区别。在/ usr / include / i386-linux-gnu / bits中找到的位(未显示为GCC包含路径)。我的libc6-dev版本符合您的要求。
hsmyers

我建议您尝试使用gcc的实验版(非Ubuntu标准)。我建议删除该文件并从存档中安装4.6.1。
杰里米·科尔

我几乎在想什么-除了一个小问题,就是不知道a)它是如何到达的,b)如何删除它。apt-get删除gcc可以工作吗?还是我需要完整的包裹名称?也许是i686-pc-linux-gnu-4.7.0?
hsmyers 2011年

0

我的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。至

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.