c - 在 ArchLinux 中包含 "<uapi/..>"目录的正确方法是什么?

标签 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 ?他们看起来都有点奇怪。

最佳答案

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/

相关文章:

linux - Cloudera中的.bash_profile在哪里?

ruby-on-rails - Rails 在环境变量中包含返回字符

linux-kernel - Read-Copy-Update 和 Reader-Writer-Lock 的区别?

python - Python 的 C 和 C++ 库如何跨平台?

c++ - 如何为 SQLite 表中的树建立索引?

linux - 在 unix 上部署 shell 脚本的惯用方法

c - 如何计算旧内核上的自愿上下文切换

linux - 如何理解Systemtap脚本中的 "$location"?

c 如何删除字符串的前 x 个单词?

c++ - Clang - 获取实际的函数指针声明回溯