我的操作系统是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
?他们看起来都有点奇怪。
答案 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>
。