在构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/
不知道这是不是“正确的方式”,但我已阅读上面的意见,并给了我这个想法…,它的工作:)