前言
在 Linux (Ubuntu等)环境下安装某些软件或开发环境时,我们可能会意外地引入交叉编译工具链,尤其是用于 ARM 架构的交叉编译器,比如 gcc-arm-linux-gnueabi
等。而这种行为会修改系统原有的开发环境,甚至导致无法编译原生程序。本文记录一次在 Ubuntu 18.04 上编译 C 程序时遇到 fatal error: asm/errno.h: No such file or directory
的报错,并给出详细排查和恢复步骤。
❗ 问题描述
在执行 make
或使用 gcc
编译一个看似正常的程序时,报出如下错误:
/usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directory#include <asm/errno.h>^~~~~~~~~~~~~
compilation terminated.
这意味着系统在 /usr/include/
路径下未能找到 asm/errno.h
,而这个头文件是 Linux 内核用户空间 API 中的一部分,通常是符号链接或文件指向实际的内核头路径。
系统上查看这个 ‘asm/errno.h’ 文件是存在的,就是指引 .h 头文件是有问题的。
⚙️ 这些头文件到底来自哪?
在 Linux 系统中,/usr/include/asm
并不是实际目录,而是一个符号链接,通常指向 asm-generic
或特定架构的头文件。例如:
/usr/include/asm -> asm-generic/
其中:
asm/errno.h
是一个与架构相关的头文件,一般在安装linux-libc-d