我刚接触过GNU/Linux (Lubuntu11.10),并试图从2001年的Linux编程书中编译一些C源代码。对于在GNU/Linux中包含头文件,我有些困惑。
该程序是JohnR.Hall等人(2001年)所著“Programming Linux ”一书中的"simplefb.c“。我直接跳到了关于使用框架缓冲区进行控制台编程的章节,但遇到了这个直接的障碍。我只想在Linux上用C制作一些简单的非GUI(和非文本)游戏.
问题似乎是头文件中包含了几个#:
#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/中有几个),因为
>无名-r
3.0.0-17-generic
使用修改后的#include,我得到了编译错误:
包含在the_file.c的文件中
/usr/src/linux-headers-3.0.0-17-generic/include/asm-generic/page.h:96:38:致命错误: asm-
泛型/memory_Model.h:没有这样的文件或目录
编译已终止。
在页面h中,它指定了包含asm-generic/memory_model.h (删除了散列和‘标记’,否则该行在这里不会正确显示),但是这个文件确实存在于同一个文件夹中。
所以,在我大惊小怪(首先删除前面包含的asm-泛型/位并将其放入引号中)之前,我应该在这里使用什么正确的过程?有一个明显的正确的方法来获得图书源代码的编译吗?
谢谢。会非常感谢你的帮助。
发布于 2012-04-26 22:22:19
有两组不同的头文件:一组用于Linux内核编程,另一组用于通用用户空间程序。
/usr/src/linux*用于内核。
/usr/include/*是“普通”标头。
你不想把两者混为一谈。
如果您正在编写游戏,我强烈建议您查看SDL或OpenGL:
增编:
sudo apt-get xserver-xorg-video-fbdev
希望能帮上忙。
PS:
看来,你的书“编程Linux游戏”也是一个关于SDL的著名教程。
发布于 2012-04-26 22:21:59
gcc的-I参数添加了一个目录来查找头文件。
gcc ... -I /usr/src/.../include ...https://stackoverflow.com/questions/10342164
复制相似问题