我正在使用 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
所以我有头文件,但它没有找到它?为什么这不起作用?
我正在使用 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
所以我有头文件,但它没有找到它?为什么这不起作用?
我不确定您是该程序的作者,还是您只是想编译从某人那里获得的程序,但看起来 #include <asm/io.h>
应该替换为#include <sys/io.h>
. 有关更多信息,请参阅此 google 搜索的结果。
永远不要使用/usr/include/asm
. 改为使用标题/usr/include/sys
。
您正在使用/usr/include/asm/
的是针对内核标头的特定版本构建代码。当内核标头更改时,这可能会损坏。通过链接到其他位置,您将链接到 glibc 中更稳定的头文件形式,它将根据需要引用内核头文件。#ifdef ... #endif
这就是为什么标题中有大量复杂的行。
相信我,对并行端口进行位摆弄所需的所有工具都将在 中/usr/include/sys/io.h
,因为您可能将使用的所有工具都是直接调用适当的readb()
设备。writeb()
/dev/lpX
您可能需要添加路径。在 gcc 命令行上:
gcc -I/usr/src/linux-2.6.32-gentoo/arch/x86/include ...
尝试
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
添加 -I/usr/src/linux-2.6.32-gentoo/arch/x86/include 到你的编译命令行。