【问题标题】:Using List.h in C files, Ubuntu10.10在 C 文件中使用 List.h,Ubuntu10.10
【发布时间】:2011-06-25 10:54:35
【问题描述】:

我在 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”

所以如果我必须复制每个,我可以但 prefetch 反过来调用其他依赖项,这些依赖项不存在于 /usr/include 目录中。希望你能理解。

我该如何解决这个问题?

【问题讨论】:

  • 为什么要包含该标题?这几乎肯定不是你想要的。

标签: c linux list ubuntu


【解决方案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

【讨论】:

    【解决方案2】:

    您使用的头文件是专为 Linux 内核的内部使用而设计的。它们不是为用户级程序设计的。

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

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

    【讨论】:

      【解决方案3】:
      • 添加 -I/usr/src/linux 是不行的,因为未经处理的头文件不打算在用户程序中使用
      • 您可以手动将list.h 复制到您自己的项目中并进行清理
      • 或使用专门用于用户空间并提供相同功能的库(因为您已经在其他地方使用过 libHX,您可能需要继续阅读链表章节)

      【讨论】:

        猜你喜欢
        • 2021-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 2016-01-04
        相关资源
        最近更新 更多