43

在构建 gcc 时,我收到此错误:

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'

我正在从源代码构建 gcc 4.1。我想我必须安装build-essential. 但是,在 ubuntu 12.04 中安装该软件包会自动下载并安装 gcc 4.6,我不希望这样。

还有其他方法吗?

4

11 回答 11

48

我想你想要的包是linux-libc-dev. 我在构建 32-on-64 时遇到了这个问题;所以我需要linux-libc-dev:i386.

于 2014-04-24T20:22:18.197 回答
36

这对我有用:

ln -s /usr/include/asm-generic /usr/include/asm
于 2014-10-20T19:11:39.163 回答
23

这对我有用:

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

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

于 2016-08-03T18:38:22.053 回答
5

这为我修好了。

sudo apt-get install linux-libc-dev:i386
于 2018-04-21T17:39:39.517 回答
5

这在 Debian 10 上为我解决了这个问题,即使我正在使用基于 LLVM 的编译器进行编译:

sudo apt install gcc-multilib
于 2020-04-17T09:34:23.947 回答
3

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

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

于 2013-02-10T07:24:18.027 回答
2

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

不要从系统上的某个地方(或者,更糟糕的是,从其他地方)复制一些具有相似名称的文件。丢失文件可能意味着某些包已损坏;再次,请您的包管理器检查所有内容并(重新)安装丢失/损坏的部分。

除非您正在运行某些 LTS 版本,否则请升级。您的 Ubuntu 已经有 2 年历史了,即古老的。

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

于 2014-04-24T20:57:25.663 回答
0

如果要使用 asm 文件中的 errno.h,只需转到 /usr/(ctrl + l,键入 /usr/),然后搜索 errno.h 和 errno-base.h。找到它们后,复制这两个文件中的代码,并将它们放在包含文件夹中。请注意,在“errno.h”中,该文件包含“errno-base.h”:

#include <asm-generic/errno-base.h>

要么在上面创建一个同名的目录,要么将上面的代码更改为适合您使用的不同内容。

于 2020-01-05T13:59:08.470 回答
0

在 Ubuntu 16.04 x86_64 上,你可以试试这个:

ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm

这适用于我的服务器。

于 2019-03-13T08:33:09.613 回答
-1

如果你能找到:

usr/include/asm-generic/errno.h

通过执行:

find /usr/include -name errno.h

然后尝试执行:

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

它可能会解决这个问题。

于 2014-07-03T07:36:32.170 回答
-1

我在编译 Asterisk 1.8.24.0 时遇到了这个问题,并通过以下方式解决了它:

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

不知道这是否是“正确的方式”,但我已经阅读了上面的评论,这给了我这个想法......它奏效了:)

于 2013-11-02T13:57:19.420 回答