asm / errno.h:没有这样的文件或目录

在构buildgcc的时候,我得到这个错误:

In file included from /usr/include/bits/errno.h:25, from /usr/include/errno.h:36, from ../.././gcc/tsystem.h:96, from ../.././gcc/crtstuff.c:68: /usr/include/linux/errno.h:4:23: error: asm/errno.h: No such file or directory make[2]: *** [crtbegin.o] Error 1 make[2]: Leaving directory `/opt/gcc-4.1.2/host-x86_64-unknown-linux-gnu/gcc' 

我从源代码构buildgcc 4.1。 我想我必须安装build-essential 。 然而,在Ubuntu 12.04中安装该软件包将自动下载并安装gcc 4.6,我不想这样做。

有没有其他的方法?

我想你想要的软件包是linux-libc-dev 。 我在32上建立64时遇到了这个问题; 所以我需要linux-libc-dev:i386

这对我工作:

 ln -s /usr/include/asm-generic /usr/include/asm 

这对我工作:

 sudo ln -s /usr/include/asm-generic /usr/include/asm 

原因在于GCC希望被称为/usr/include/asm在某些发行版中被重命名为/usr/include/asm-generic

/usr/include/asm/errno.h是linux头文件的一部分。 我不能直接对Ubuntu 12.04说话,但一般来说,你可以下载Linux源码作为你的发行包,它不应该要求你下载/安装gcc。 如果不这样做,你可以手动下载你的内核版本的linux头文件( uname -a ),并使用include指令来CFLAGS指定目录来查找这些目录。

编辑: sudo apt-get install linux-headers-generic可能适合你。

您缺少部分开发包。 我不知道Ubuntu,但你应该可以问它的包管理系统来安装包含/usr/include/asm/errno.h的包。

不要从系统的某个地方(或者更糟糕的情况下,从其他地方)复制一些类似的文件。 缺少文件可能意味着某些软件包已损坏; 再次,要求你的软件包管理器检查一切,并(重新)安装缺失/碎片。

除非你正在运行一些LTS版本,升级。 你的Ubuntu有两岁了,也就是古代。

当我们在这个时候,为什么在这个美丽的星球上,你在建造一个如此古老的编译器? 目前GCC刚刚发布4.9.0,4.7之前的任何东西都是古老的历史,不再支持。

如果你能找到:

usr/include/asm-generic/errno.h

通过执行:

find /usr/include -name errno.h

然后尝试执行:

cp --archive /usr/include/asm-generic /usr/include/asm

它可以解决这个问题。

我在编译Asterisk 1.8.24.0时遇到了这个问题,并解决了这个问题:

 mkdir /usr/include/asm-generic cp /usr/include/asm/errno-base.h /usr/include/asm-generic/ 

不知道这是不是“正确的方式”,但我已阅读上面的意见,并给了我这个想法…,它的工作:)