我在IBM R51机器上运行Ubuntu 10.10。当我访问list.h来读取它(手动/人工)时,我打开/usr/src/linux-headers-2.6.35-22/include/linux。
但是当在终端中编写C程序时,我无法调用任何#include,因为它不在默认的/ usr / include文件夹中。
当我通过键入#include“/usr/src/linux-headers-2.6.35-22/include/linux/list.h”来更改语句以反映路径时,它会返回错误,因为list.h依次调用其他头文件,提到位于“linux”文件夹中 您必须注意头文件: “linux / poison.h”,“linux / prefetch.h”和“asm / system.h”
因此,如果我必须复制每个,我可以反过来预取其他依赖项,这些依赖项在/ usr / include目录中不存在。我希望你明白。
我该如何解决这个问题?
答案 0 :(得分:1)
你确定这些标题真的是你需要的吗?标准C头应位于/ usr / include
下无论如何,您需要通过'-I'标志将标头搜索路径传递给编译器。
通过-I
传递路径-I/usr/src/linux-headers-2.6.35-22/include/linux
然后在你的C代码中
#include "list.h"
答案 1 :(得分:1)
-I/usr/src/linux
是不行的,因为未经过用户程序无法使用未经过处理的头文件list.h
复制到您自己的项目并清理答案 2 :(得分:1)
您使用的头文件是为Linux内核的内部使用而设计的。它们并非设计用于用户程序。
如果您必须使用这些标头(Linux内核列表实现 辉煌),将标头复制到您的程序源目录中。复制引用的每个文件,编辑每个文件以删除有关在内核中使用的任何假设,并递归直到完成为止。我可能会建议您创建自己的prefetch()
宏,它什么也不做,而不是尝试解开<linux/prefetch.h>
。对<linux/poison.h>
执行相同操作,并尽可能解开<linux/types>
和<linux/stddef.h>
(这里不太难:)。
并且还要确保你的项目GPLv2许可(特别是GPLv2,Linux内核的COPYING文件非常严格,GPLv2是唯一适用的许可证; GPL是否只允许指定一个版本存在争议,但那就是Linus之前选择的许可证,以及对所有文件有效的许可证,除非另有规定)。