我的操作系统是 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
?他们看起来都有点奇怪。
最佳答案
TL;博士:pacman -S linux-api-headers
和#include <linux/ptrace.h>
UAPI 代表用户 API,是内核源代码中的文件夹名称,该文件夹旨在作为用户可访问的内核 header 的一部分复制到安装中。对于 Arch,其中一些 header 被复制到 /usr/include/linux/
(加上一些内核编译时生成的文件)。但这不是默认安装的一部分,它实际上分离在不同的包中:linux-api-headers
(安装后即可使用 #include <linux/ptrace.h>
)。
没有/usr/include/uapi
这是设计使然,原始uapi文件夹的内容直接复制到/usr/include
中.
因此,除非您正在编写内核模块,否则您可能正在寻找的是 #include <linux/ptrace.h>
.
关于c - 在 ArchLinux 中包含 "<uapi/..>"目录的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45340907/