#在Ubuntu上的旧C源代码(page.h等)中包含某些头文件
作者:互联网
我是GNU / Linux的新手(Lubuntu 11.10),并试图从2001年的Linux编程书中编译出一些C源代码.对于在GNU / Linux中包含头文件有些困惑.
该程序来自John R. Hall等人(2001年)的《 Programming Linux Games》一书中的“ 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 /中有多个文件夹),因为
>匿名-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 / *是“普通”标头.
您不想将两者混为一谈.
如果您正在编写游戏,强烈建议您看一下SDL或OpenGL:
> http://www.linuxjournal.com/article/6410
> http://content.gpwiki.org/index.php/SDL:Tutorials
> http://www.opengl.org/wiki/Getting_Started
> http://www.dreamincode.net/forums/topic/63945-game-programming-in-linux-for-windows-programmers-part-1/
附录:
>问题是您缺少fbdev(用户空间)标头.您不想引入任何Linux内核源标头.
>您应该可以使用以下命令获取标题:
须藤apt-get xserver-xorg-video-fbdev
>您可能还需要引入其他依赖关系-apt-get应该告诉您.
‘希望有帮助.. PSM
PS:
看来您的书“ Programming Linux Games”也是有关SDL的备受赞誉的教程.
标签:header-files,c-3,linux 来源: https://codeday.me/bug/20191201/2080565.html