我是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并将其放在引号中),我应该在这里使用的正确程序是什么?是否有一种明显正确的方法可以让书源代码编译?
谢谢。非常感谢任何帮助。
答案 0 :(得分:3)
有两个不同的头文件集:一个用于Linux内核编程,另一个用于一般用户空间程序。
/ usr / src / linux *用于内核。
/ usr / include / *是“普通”标题。
你不想要混合''匹配两者。
如果您正在编写游戏,我强烈建议您查看SDL或OpenGL:
附录:
问题是您缺少fbdev(用户空间)标头。您不想引入任何Linux内核源头文件。
您应该可以使用此命令获取标题:
sudo apt-get xserver-xorg-video-fbdev
您可能还需要引入其他依赖项 - apt-get应该告诉您。
'希望有所帮助.. PSM
PS:
看来你的书“编程Linux游戏”也是SDL上备受推崇的教程。
答案 1 :(得分:0)
gcc的-I
参数添加了一个目录来查找头文件。
gcc ... -I /usr/src/.../include ...