在构建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,我不希望这样。
还有其他办法吗?
答案 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
它可以解决这个问题。