3

私は GNU/Linux (Lubuntu 11.10) を初めて使用し、2001 年の Linux プログラミングの本から C ソース コードをコンパイルしようとしています。GNU/Linux にヘッダー ファイルが含まれていることについて多少混乱しています。

このプログラムは、John R. Hall ほか (2001 年) による著書『 Programming Linux Games』の「simplefb.c」です。フレームバッファを使用したコンソールプログラミングの章に直接ジャンプしましたが、すぐに問題が発生しました。単純な非 GUI (および非「テキスト」) ゲームを Linux 上の C で作成して楽しみたいと思います...

問題は、ヘッダー ファイルへのいくつかの #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>    


> uname -r 3.0.0-17-generic のため、この特定のヘッダー フォルダーを選択しました (/usr/src/ にいくつかあります)。

#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 を見ると、include asm-generic/memory_model.h が指定されています (この行が正しく表示されないため、ハッシュと「タグ」を削除しました) が、このファイルは同じフォルダーに存在します。

それで、私がワイルドグースチェイスに行く前に(最初に前のインクルードの asm-generic/ ビットを削除して引用符で囲みます)、ここで使用すべき正しい手順は何ですか? 本のソースコードをコンパイルする明確な正しい方法はありますか?

ありがとうございました。どんな助けにも最も感謝します。

4

2 に答える 2

3

ヘッダー ファイルには2 つの異なるセットがあります。1 つは 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:

あなたの著書「Programming Linux Games」も、SDL のチュートリアルとして高く評価されているようです。

于 2012-04-26T22:22:19.570 に答える
0

gcc への-I引数は、ヘッダー ファイルを探すディレクトリを追加します。

gcc ... -I /usr/src/.../include ...
于 2012-04-26T22:21:59.350 に答える