“#include <asm io.h =”“>”导致“错误:asm / io.h:没有这样的文件或目录”</asm>

时间:2009-12-23 15:50:39

标签: c hardware-interface gentoo parallel-port

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

#include <asm/io.h>

当我尝试在其上使用gcc时,会产生此输出:

  

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

“locate asm / io.h”yeilds(除其他外):

  

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

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

5 个答案:

答案 0 :(得分:10)

我不确定您是否是该计划的作者,或者您只是想编译一个来自某人的程序,但looks like #include <asm/io.h>应该替换为#include <sys/io.h> 。有关详细信息,请参阅this google search的结果。

答案 1 :(得分:4)

从不使用/usr/include/asm中的代码/标题。请改用/usr/include/sys中的标题。

使用/usr/include/asm/正在做的是根据内核标头的特定版本构建代码。当内核头文件发生变化时,这会受到破坏。通过链接到另一个位置,您将链接到glibc中更稳定的头文件形式,它将根据需要引用内核头文件。这就是为什么标题中有一大堆#ifdef ... #endif行的字符串。

相信我,所有用于平行端口的工具都在/usr/include/sys/io.h,因为你可能要使用的只是直接readb()和{{1} }调用相应的writeb()设备。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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