系统相关
首页 > 系统相关> > #在Ubuntu上的旧C源代码(page.h等)中包含某些头文件

#在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