8

我正在使用 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

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

4

5 回答 5

11

我不确定您是该程序的作者,还是您只是想编译从某人那里获得的程序,但看起来 #include <asm/io.h>应该替换为#include <sys/io.h>. 有关更多信息,请参阅此 google 搜索的结果。

于 2009-12-23T16:09:22.210 回答
4

永远不要使用/usr/include/asm. 改为使用标题/usr/include/sys

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

相信我,对并行端口进行位摆弄所需的所有工具都将在 中/usr/include/sys/io.h,因为您可能将使用的所有工具都是直接调用适当的readb()设备。writeb()/dev/lpX

于 2010-11-11T06:54:08.977 回答
0

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

gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include ...
于 2009-12-23T15:53:37.630 回答
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
于 2009-12-23T15:53:53.167 回答
0

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

于 2009-12-23T15:54:14.600 回答