我正在使用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
所以我有头文件,但它找不到它? 为什么这不起作用?
答案 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添加到编译命令行。