举个例子:
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: 没有那个文件或目录
我已经完全把事情搞砸了。任何人都可以请指教吗?
在全新的梦幻安装中,这对我来说效果很好。/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)