【问题标题】:Including Linux Headers returns No such file or directory包括 Linux Headers 返回 No such file or directory
【发布时间】:2017-11-28 17:51:15
【问题描述】:

我正在尝试编写一个 C 代码,它将利用 Linux 内核中的内存信息(进程的虚拟地址空间、进程的状态等信息。)

我需要包含以下标题才能获取这些信息。

#include<linux/init.h>
#include<linux/module.h>
#include<linux/mm.h>

实际文件存在于 linux 文件夹下,但是使用 gcc 编译文件时会返回该文件

没有这样的文件或目录

有人可以解释为什么我会收到这个错误!我该怎么办?

  • 我已经编译了内核并安装了所有可用的更新(内核版本 3.16.0)

【问题讨论】:

  • 如果没有使用apt get 安装,您是否安装了linux-headers-3.16.0?另一种选择是找到那些头文件路径并在您使用-I 标志编译gcc 时包含相对路径。
  • 实际文件存在于 linux 文件夹下 编译器在/usr/include/linux 中查找,但在那里找不到。也许它在其他地方?尝试添加 -I [path to (parent of) linux folder] 以便编译器知道在哪里查找!
  • 我安装了标头,使用 gcc -I 编译,现在我收到此错误fatal error: uapi/linux/stddef.h: No such file or directory #include &lt;uapi/linux/stddef.h&gt;,而我的代码中没有包含这样的标头

标签: c linux header kernel header-files


【解决方案1】:

你的问题的答案。

使用apt-get安装缺少的包kernel-devel

注意:我提到过apt 安装包,您可以使用系统支持的包,例如yum

如果您无法安装 kernel-devel,那么您可以尝试安装通用 Linux 头文件。

sudo apt-get update && sudo apt-get install linux-headers-`uname -r`

然后您可以使用locate 实用程序检查 init.h 或 module.h 的位置

然后使用-I 标志在编译中添加路径。

gcc -g your_file.c -I/usr/path/of/the/kernel/header/include

【讨论】:

  • 没有迹象表明 OP 正在使用基于 Debian 的发行版。他们可能会,但这几乎不是一个独立于发行版的“问题的答案”。
  • 好的,我会添加使用安装包软件yum或sudo apt或者什么包可用。
  • 我安装了标头,使用 gcc -I 编译,现在我收到此错误fatal error: uapi/linux/stddef.h: No such file or directory #include &lt;uapi/linux/stddef.h&gt;,而我的代码中没有包含这样的标头
  • 你为什么要给出标题的整个路径?取而代之的是#include ,这取决于安装glib,您可以忽略该标头和也将链接的#include
  • 我不知道这是从哪里来的!我在代码中包含的头文件正在调用其他头文件!这就是我安装标题后文件的外观!所有的 include 都有这个 /linux 路径!!!
猜你喜欢
  • 2016-01-05
  • 2015-02-04
  • 2014-04-19
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多