在C文件中使用List.h,Ubuntu10.10

时间:2011-02-11 09:53:43

标签: c linux list ubuntu

我在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目录中不存在。我希望你明白。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

你确定这些标题真的是你需要的吗?标准C头应位于/ usr / include

无论如何,您需要通过'-I'标志将标头搜索路径传递给编译器。

通过-I

传递路径
-I/usr/src/linux-headers-2.6.35-22/include/linux

然后在你的C代码中

#include "list.h"

Link to GCC manual & preprocessor directives

答案 1 :(得分:1)

  • 添加-I/usr/src/linux是不行的,因为未经过用户程序无法使用未经过处理的头文件
  • 您可以手动将list.h复制到您自己的项目并清理
  • 或使用专门用于用户空间的库并提供相同的功能(因为您已在其他地方使用了libHX,您可能希望继续阅读链接列表章节)

答案 2 :(得分:1)

您使用的头文件是为Linux内核的内部使用而设计的。它们并非设计用于用户程序。

如果您必须使用这些标头(Linux内核列表实现 辉煌),将标头复制到您的程序源目录中。复制引用的每个文件,编辑每个文件以删除有关在内核中使用的任何假设,并递归直到完成为止。我可能会建议您创建自己的prefetch()宏,它什么也不做,而不是尝试解开<linux/prefetch.h>。对<linux/poison.h>执行相同操作,并尽可能解开<linux/types><linux/stddef.h>(这里不太难:)。

并且还要确保你的项目GPLv2许可(特别是GPLv2,Linux内核的COPYING文件非常严格,GPLv2是唯一适用的许可证; GPL是否只允许指定一个版本存在争议,但那就是Linus之前选择的许可证,以及对所有文件有效的许可证,除非另有规定)。