#include在Ubuntu上的旧C源(page.h等)中的某些头文件

时间:2012-04-26 22:14:05

标签: c linux header-files

我是GNU / Linux(Lubuntu 11.10)的新手,我正试图从2001年的Linux编程书中编译一些C源代码。我对在GNU / Linux中包含头文件感到有些困惑。

程序是来自John R. Hall等人(2001)的书编程Linux游戏中的“simplefb.c”。我直接跳到了使用framebuffer进行控制台编程的章节,但是直接遇到了这个问题。只想在Linux上用C语言制作一些简单的非GUI(和非'''')游戏,以获得乐趣......

问题似乎是头文件的一些#includes:

#include <asm/page.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/fb.h>

尝试书中给出的代码:

&GT; cc the_file.c

致命错误:asm / page.h:没有这样的文件或目录 编译终止。

事实上,似乎这些文件存在于其他地方(现在?)所以我最初尝试修改第一个#include:

#include </usr/src/linux-headers-3.0.0-17-generic/include/asm-generic/page.h>    

我选择了这个特殊的标题文件夹(/ usr / src /中有几个)因为
&GT; uname -r
3.0.0-17泛型

通过修改后的#include,我得到了编译错误:

在the_file.c中包含的文件中 /usr/src/linux-headers-3.0.0-17-generic/include/asm-generic/page.h:96:38:致命错误:asm -
generic / memory_model.h:没有这样的文件或目录
编译终止。

在该页面中查看,它指定 包括asm-generic / memory_model.h (删除了哈希值和'标签',因为此行不会正确显示在此处) 但是这个文件确实存在于同一个文件夹中。

所以,在我进行狂野追逐之前(首先删除先前包含的asm-generic / bit并将其放在引号中),我应该在这里使用的正确程序是什么?是否有一种明显正确的方法可以让书源代码编译?

谢谢。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

有两个不同的头文件集:一个用于Linux内核编程,另一个用于一般用户空间程序。

/ usr / src / linux *用于内核。

/ usr / include / *是“普通”标题。

想要混合''匹配两者。

如果您正在编写游戏,我强烈建议您查看SDL或OpenGL:

附录:

  1. 问题是您缺少fbdev(用户空间)标头。您不想引入任何Linux内核源头文件。

  2. 您应该可以使用此命令获取标题:

    sudo apt-get xserver-xorg-video-fbdev

  3. 您可能还需要引入其他依赖项 - apt-get应该告诉您。

  4. '希望有所帮助.. PSM

    PS:

    看来你的书“编程Linux游戏”也是SDL上备受推崇的教程。

答案 1 :(得分:0)

gcc的-I参数添加了一个目录来查找头文件。

gcc ... -I /usr/src/.../include ...