【问题标题】:"#include <asm/io.h>" causes "error: asm/io.h: No such file or directory"“#include <asm/io.h>”导致“错误:asm/io.h:没有这样的文件或目录”
【发布时间】:2010-12-29 12:59:34
【问题描述】:

我正在使用 gentoo 并尝试编译一个程序来控制并行端口上的位。它的顶部附近有这条线:

#include <asm/io.h>

当我尝试对其使用 gcc 时,它会产生以下输出:

port.c:4:20: 错误:asm/io.h: 没有这样的文件或目录

“定位 asm/io.h”(除其他外):

/usr/src/linux-2.6.32-gentoo/arch/x86/include/asm/io.h

所以我有头文件,但它没有找到它? 为什么这不起作用?

【问题讨论】:

  • 它不在您的默认包含路径中?

标签: c hardware-interface gentoo parallel-port


【解决方案1】:

我不确定您是否是该程序的作者,或者您只是想编译您从某人那里获得的程序,但 looks like #include &lt;asm/io.h&gt; 应该替换为 #include &lt;sys/io.h&gt;。更多信息请查看this google search 的结果。

【讨论】:

    【解决方案2】:

    切勿使用/usr/include/asm 中的代码/标头。请改用/usr/include/sys 中的标题。

    您使用/usr/include/asm/ 所做的是针对内核标头的特定版本构建代码。当内核标头更改时,这可能会损坏。通过链接到其他位置,您将链接到 glibc 中更稳定形式的头文件,它将根据需要引用内核头文件。这就是为什么在标题中散布大量#ifdef ... #endif 行的原因。

    相信我,您需要在/usr/include/sys/io.h 中处理并行端口所需的所有工具,因为您可能会直接使用readb()writeb() 调用适当的@ 987654328@设备。

    【讨论】:

      【解决方案3】:

      您可能需要添加路径。在 gcc 命令行上:

      gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include ...
      

      【讨论】:

        【解决方案4】:

        试试

        gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include xyx
        

        其中 xyz 是您要编译的文件。

        这告诉编译器在哪里寻找包含文件。 如果你的包含文件在不同的位置,你可以有很多 -I 选项,像这样

        gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include -I/usr/src/some/Dir xyx
        

        【讨论】:

        • 谢谢,这解决了这个问题。现在唯一的问题是该文件引入了一堆其他文件,其中一个(asm-generic/ioctls.h)在我的存储驱动器上根本不存在……可悲的是 /usr/include/ asm-generic/ioctl.h 存在。可能是标题中的错字?
        • 看我的回答。看起来很旧的代码,试图让它在现代 linux 内核上工作可能会很麻烦。我可以知道它是什么库/代码吗?
        • 是parcon,来自bigasterisk.com/projects/parallel。虽然网站上有二进制文件,但我不想使用它,因为我希望能够自定义程序以满足我的需要。无论如何,我在 /usr/include/asm-generic 中添加了一个从 ioctls.h 到 ioctl.h 的符号链接,再加上命令行上的 -I/usr/src/linux/include 开关,现在我遇到了一堆错误在 io.h 中关于语法错误和未定义的变量。也许符号链接没有指向正确的文件?
        • 正如我在回答中所说,尝试将asm/io.h 替换为sys/io.hhomebrewtechnology.blogspot.com/2009/03/… 似乎表明它有效。
        • 另外,你不能像这样链接类似命名的文件并假设它会工作:-)。
        【解决方案5】:

        将 -I/usr/src/linux-2.6.32-gentoo/arch/x86/include 添加到您的编译命令行中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-30
          • 1970-01-01
          • 1970-01-01
          • 2013-01-25
          • 2017-02-22
          相关资源
          最近更新 更多