asm/errno.h:没有此文件或目录

asm/errno.h:没有此文件或目录

我目前正在尝试安装 gcc 4.8.1。目前安装了 4.8.2 和 4.9.1。我从这里下载了 4.8.1http://gcc.cybermirror.org/releases/gcc-4.8.1/。提取文件后,我做了一个./configure,然后尝试make。最后make,我得到了这个错误

/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
 #include <asm/errno.h>

我是 Linux 新手,所以我不知道如何查找或添加这个头文件。

编辑:我采取的步骤:

  1. 将 gcc-4.8.1.tar.gz 解压到某个文件夹
  2. 打开终端窗口
  3. cd gcc-4.8.1
  4. ./configure --build=x86_64-linux-gnu
  5. make -j4

我不知道我做了什么不同的事情,但它最终编译成功了。之后我做了 make install。我现在的问题是如何使用这个而不是 4.8.2,使用命令 gcc-4.8 仍然默认为 4.8.2。

答案1

我遇到了同样的错误ubuntu-xenial 4.4.0-75-generic

我发现我有一个/usr/include/asm-generic文件夹,但没有/usr/include/asmgcc 正在寻找的。

创建符号链接为我解决了这个问题。

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

公平警告: 虽然有时不得不使用这种诡计,但仅仅因为它有效,就并不总是一个好主意。我在虚拟机中执行此操作,我可以通过运行一个简单的脚本来重新创建它,这就是为什么即使我破坏了某些东西也没什么大不了的。

答案2

asm/errno.h头由以下机构提供:各种套餐。很奇怪gcc需要它,但你可以尝试:

sudo apt-get install linux-libc-dev

您还需要告诉 GCC 寻找针对体系结构和操作系统的标头特定位置:

../configure --build=x86_64-linux-gnu 

(或i386-linux-gnu适用于 32 位 Ubuntu)。


强烈建议在从源代码构建内容时使用--prefix标志(对于 GCC,使用--program-suffix标志)进行配置。如果您还没有这样做,请尝试运行/usr/bin/gcc

因此:

tar xf gcc-4.8.1.tar.gz 
mkdir gcc
cd gcc
../gcc-4.8.1/configure  --build=x86_64-linux-gnu --prefix=/usr/local --program-suffix=-4.8.1
make -j
sudo make install

现在您的 GCC 二进制文件将被安装到/usr/local/bin/,以及其他文件夹中的其他内容/usr/local

例如:

$ /usr/local/bin/gcc-4.8.1  # or simply gcc-4.8.1, since this folder is in your PATH

注意我是如何从 GCC 源代码所在的不同目录运行的?就是configure这样makeGCC 文档建议构建GCC。

相关内容