包含&#34; <uapi .. =“”>&#34;的正确方法是什么? ArchLinux中的目录?

时间:2017-07-27 03:33:01

标签: c linux linux-kernel header-files archlinux

我的操作系统是ArchLinux,并编写一个简单的程序,其中包含<uapi/linux/ptrace.h>

#include <uapi/linux/ptrace.h>

void main(void) {}

汇编抱怨:

test.c:1:10: fatal error: uapi/linux/ptrace.h: No such file or directory
#include <uapi/linux/ptrace.h>
      ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.

我检查/ust/include/uapi目录,发现它是空的。最后,我发现正确的uapi位置为/usr/lib/modules/4.11.9-1-ARCH/build/include/uapi。那么在<uapi/linux/..>中使用ArchLinux的规范方法是什么?创建一个指向/usr/lib/modules/4.11.9-1-ARCH/build/include/uapi的新链接或将路径放入C_INCLUDE_PATH?他们看起来都有点奇怪。

1 个答案:

答案 0 :(得分:1)

TL; DR:pacman -S linux-api-headers#include <linux/ptrace.h>

UAPI代表User API,是内核源文件夹中的一个文件夹的名称,该文件夹旨在作为用户可访问的内核头文件的一部分复制到安装中。在Arch的情况下,其中一些头文件被复制到/usr/include/linux/(加上一些内核编译生成的文件)。但这不是默认安装的一部分,它实际上是在另一个包中分开的:linux-api-headers(安装后,您可以使用#include <linux/ptrace.h>)。

没有/usr/include/uapi,这是设计使然,原始uapi文件夹的内容会直接复制到/usr/include

因此,除非您正在编写内核模块,否则您可能正在寻找的是#include <linux/ptrace.h>