我是GNU/Linux的新手(Lubuntu 11.10),正试图从2001年的Linux编程书中编译出一些C源代码。对于在GNU/Linux中包含头文件有些困惑。
该程序是John R. Hall等人于2001年出版的编程Linux游戏一书中的“simplefb.c”。我直接跳到有关使用帧缓冲区进行控制台编程的章节,但遇到了这一即时障碍。只是想在Linux上用C制作一些简单的非GUI(和非“文本”)游戏...
问题似乎出在头文件的几个#includes上:
#include <asm/page.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
尝试按照书中给出的代码:
> 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/中有多个文件夹),因为
> 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:没有这样的文件或目录
编译终止。
然后查看该page.h,它指定
包括asm-generic/memory_model.h
(删除了哈希和“标签”,否则此行将不会在此处正确显示)
但是此文件确实存在于同一文件夹中。
因此,在继续进行大笔交易(首先删除先前包含的asm-generic/位并将其放在引号中)之前,我应该在此处使用的正确步骤是什么?有没有一种显而易见的正确方法可以使本书的源代码进行编译?
谢谢。将非常感谢您的帮助。
最佳答案
头文件有两组,一组用于Linux内核编程,另一组用于常规用户空间程序。
/usr/src/linux *用于内核。
/usr/include/*是“普通” header 。
您不想将两者混为一谈。
如果您正在编写游戏,强烈建议您看一下SDL或OpenGL:
附录:
sudo apt-get xserver-xorg-video-fbdev
'希望有帮助.. PSM
PS:
看来,您的《 Programming Linux Games》一书也是有关SDL的备受推崇的教程。
关于c - #在Ubuntu上的旧C源代码(page.h等)中包含某些头文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10342164/