举个例子:
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 也有类似的功能。