2012-04-26 4 views
3

私はGNU/Linux(Lubuntu 11.10)を使い慣れていて、Linuxプログラミングの本の中からいくつかのCソースコードをコンパイルしようとしています2001年から。GNU/Linuxにヘッダーファイルを含めることについて多少混乱しています。#Ubuntuの古いCソース(page.hなど)に特定のヘッダファイルをインクルード

このプログラムは、書籍「プログラミングLinuxゲーム」(John R. Hall et al(2001))の「simplefb.c」です。私はフレームバッファでコンソールプログラミングの章にまっすぐ飛び乗ったが、この即座に突っ込んだ。ちょうど楽しみのためのLinux上でCゲームでいくつかの簡単な非GUI(および非'text ')をしたいと思います...

問題は、ヘッダファイルには、数の#includeであるように思わ:

#include <asm/page.h> 
#include <sys/mman.h> 
#include <sys/ioctl.h> 
#include <linux/fb.h> 
本で示されたように、コードを試みる

:ASM/page.h:終了しないようなファイルまたはディレクトリ コンパイル

> CC the_file.c

致命的なエラーが発生します。

そして実際、これらのファイルはどこか別の場所に住んでいるようですので、私が最初にちょうど最初の#includeを改正しようとした(この頃?):

#include </usr/src/linux-headers-3.0.0-17-generic/include/asm-generic/page.h>  

私は、ヘッダーのこの特定のフォルダを選択しました(でいくつかがあります/ usr/src /)ので
>は、una​​me -r改正の#includeで


3.0.0-17-ジェネリック、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を削除して引用符で囲む)、ここで使用する正しい手順は何ですか?本のソースコードをコンパイルするための明白な正しい方法はありますか?

ありがとうございます。助けを借りて最も感謝します。 GCCへ

答えて

3

異なる2組のヘッダファイルのがあります。Linuxカーネルのプログラミングのための1つの、一般的なユーザ空間のための他は、プログラム。

/usr/src/linux *はカーネル用です。

/usr/include/*は「通常」のヘッダーです。

あなたはではありません。は2つにマッチします。

あなたがゲームをプログラミングしている場合、私は強くSDLまたはOpenGLを見ることをお勧めしたい:

補遺:

  1. 問題は、あなたがfbdev(ユーザ空間)のヘッダーを逃しているです。 Linuxカーネルのソースヘッダを持ち込むことは望ましくありません。あなたは、このコマンドを使用してヘッダーを取得することができるはず

  2. sudo apt-get xserver-xorg-video-fbdev

  3. あなたは、他の依存関係に持参する必要があるかもしれません - apt-getはあなたを教えてください。助け

」希望は... 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引数は、ヘッダファイルを検索するディレクトリを追加します

​​
関連する問題