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

时间:2013-02-10 07:16:52

标签: linux gcc

在构建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,我不希望这样。

还有其他办法吗?

11 个答案:

答案 0 :(得分:34)

我认为你想要的包是linux-libc-dev。我在建造32-on-64时遇到过这种情况;所以我需要linux-libc-dev:i386

答案 1 :(得分:32)

这对我有用:

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

答案 2 :(得分:17)

这对我有用:

<properties>
<!–….other versions–>
<sqlserver.version>4.0.2206.100</sqlserver.version>
</properties>
...
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>${sqlserver.version}</version>
</dependency>

在某些发行版中,GCC期望被称为sudo ln -s /usr/include/asm-generic /usr/include/asm 的原因被重命名为/usr/include/asm

答案 3 :(得分:3)

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

修改:sudo apt-get install linux-headers-generic可能适合您。

答案 4 :(得分:2)

您缺少部分开发包。我不了解Ubuntu,但您应该可以让它的软件包管理系统安装包含/usr/include/asm/errno.h的软件包。

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

除非您正在运行某些LTS版本,否则请升级。你的Ubuntu已经有两年了,也就是古老的。

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

答案 5 :(得分:2)

这为我解决了。

sudo apt-get install linux-libc-dev:i386

答案 6 :(得分:2)

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

sudo apt install gcc-multilib

答案 7 :(得分:0)

在Ubuntu 16.04 x86_64上,您可以尝试以下操作:

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

这在我的服务器上有效。

答案 8 :(得分:0)

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

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

要么在上面创建一个具有相同名称的目录,要么将上面的代码更改为适合您使用的其他名称。

答案 9 :(得分:-1)

我在编译Asterisk 1.8.24.0时遇到了这个问题,并用以下方法解决了这个问题:

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

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

答案 10 :(得分:-1)

如果你能找到:

usr/include/asm-generic/errno.h

执行:

find /usr/include -name errno.h

然后尝试执行:

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

它可以解决这个问题。