2012-04-26 1 views
3

Я новичок в GNU/Linux (Lubuntu 11.10) и пытаюсь скомпилировать некоторый исходный код C из книги программирования Linux с 2001 года. Я несколько смущен о включении заголовочных файлов в GNU/Linux.# включение некоторых файлов заголовков в старый источник C (page.h и др.) На Ubuntu

Программа «simplefb.c» из книги Программирование Linux-игр от John R. Hall et al (2001). Я прыгнул прямо в главу на консольном программировании с помощью фреймбуфера, но сразу же ударил эту немедленную защелку. просто хотелось бы сделать несколько простых не-GUI (и не'text ') игры в C на Linux для удовольствия ...

Проблема, кажется, с несколько директив #includes в заголовочные файлы:

#include <asm/page.h> 
#include <sys/mman.h> 
#include <sys/ioctl.h> 
#include <linux/fb.h> 

Попытка код, как указано в книге:

> куб.см 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, I-й ан получают ошибку компиляции:

В файле включенной из 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-родовое/memory_model.h (удалено hashs и «метка», как эту линию не будут отображаться здесь должным образом в противном случае) , но этот файл существует в той же папке.

Итак, прежде чем я пойду на дикий гусиный преследователь (сначала удалив asm-generic/bit из предыдущего, включив и поместив его в кавычки), какова правильная процедура, которую я должен использовать здесь? Есть ли очевидный правильный способ получить исходный код книги для компиляции?

спасибо. Будем очень благодарны за любую помощь.

ответ

3

Есть два различных набора заголовочных файлов:. Один для программирования ядра Linux, а другой для общего пространства пользователя программы.

/usr/src/linux * предназначен для ядра.

/usr/include/* являются «нормальными» заголовками.

Вы делаете не хотите смешать'''match два.

Если вы программируете игру, я настоятельно рекомендую вам посмотреть на СВД или OpenGL:

ДОПОЛНЕНИЕ:

  1. Проблема в том, что вы отсутствуете fbdev (в пространстве пользователя) заголовки. Вы НЕ хотите вводить заголовки источника ядра Linux.

  2. Вы должны быть в состоянии получить заголовок с помощью этой команды:

    sudo apt-get xserver-xorg-video-fbdev

  3. Вы, возможно, потребуется внести в других зависимостей, а также - APT-получить должен сказать вам.

«Надежда, что помогает .. PSM

PS:

Похоже, что Ваша книга, "Программирование Linux Игры" также хорошо рассматривать учебник по SDL.

+0

Приложение: Я загрузил образец кода из вашей книги здесь: http://nostarch.com/download/plg-listings-08-07-2001.tar.gz Вы абсолютно хотите заголовки пользовательского пространства (например,/usr /include/linux/fb.h), а не заголовки ядра Linux! – paulsm4

0

-I аргумент GCC добавляет каталог для поиска заголовочных файлов в

gcc ... -I /usr/src/.../include ...