首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#在Ubuntu上将某些头文件包含在旧的C源(page.h等)中

问#在Ubuntu上将某些头文件包含在旧的C源(page.h等)中
EN

Stack Overflow用户
提问于 2012-04-26 22:14:04
回答 2查看 4.2K关注 0票数 3

我刚接触过GNU/Linux (Lubuntu11.10),并试图从2001年的Linux编程书中编译一些C源代码。对于在GNU/Linux中包含头文件,我有些困惑。

该程序是JohnR.Hall等人(2001年)所著“Programming Linux ”一书中的"simplefb.c“。我直接跳到了关于使用框架缓冲区进行控制台编程的章节,但遇到了这个直接的障碍。我只想在Linux上用C制作一些简单的非GUI(和非文本)游戏.

问题似乎是头文件中包含了几个#:

代码语言:javascript
复制
#include <asm/page.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/fb.h>

尝试书中给出的代码:

> cc the_file.c

给出

致命错误: asm/page.h:没有终止此类文件或目录编译。

事实上,这些文件似乎生活在其他地方(现在?)因此,我最初尝试修改第一个#include,以便:

代码语言:javascript
复制
#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-泛型/位并将其放入引号中)之前,我应该在这里使用什么正确的过程?有一个明显的正确的方法来获得图书源代码的编译吗?

谢谢。会非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 22:22:19

有两组不同的头文件:一组用于Linux内核编程,另一组用于通用用户空间程序。

/usr/src/linux*用于内核。

/usr/include/*是“普通”标头。

你不想把两者混为一谈。

如果您正在编写游戏,我强烈建议您查看SDL或OpenGL:

增编:

  1. 问题是您缺少了fbdev (用户空间)标头。您不希望引入任何Linux内核源代码头。
  2. 您应该能够使用以下命令获得标题:

sudo apt-get xserver-xorg-video-fbdev

  • You可能还需要引入其他依赖项- apt-get应该告诉您.

希望能帮上忙。

PS:

看来,你的书“编程Linux游戏”也是一个关于SDL的著名教程。

票数 3
EN

Stack Overflow用户

发布于 2012-04-26 22:21:59

gcc的-I参数添加了一个目录来查找头文件。

代码语言:javascript
复制
gcc ... -I /usr/src/.../include ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10342164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档