-1

Linuxカーネルを理解しようとしているので、Linuxカーネルソースを読んでいます。では、ヘッダー ファイルがどこにあるかを特定するにはどうすればよいでしょうか。同じ名前のヘッダー ファイルが多数存在し、異なるディレクトリに配置されているためです。

例: fs/open.c に fcntl.h をインクルードします。

fcntl.h は 17 の異なるディレクトリにあります

arch/alpha/include/asm/fcntl.h
arch/arm/include/asm/fcntl.h
....
4

3 に答える 3

1

カーネル モジュールのコンパイルを管理するプリプロセッサ オプションを追加でき ます。CFLAGS特に、-Hオプション ( に渡されるgcc) は各#include-d ヘッダーのパスを表示し、-Iオプションは検索されたインクルード ディレクトリのリストを増やします。

于 2012-10-22T05:27:08.650 に答える
1

通常、ファイルが含まれていた方法によって異なります。このような引用符が含まれている場合:

#include "QuotedHeader.h"

同じディレクトリにある必要があります。(「インクルード」ディレクトリにある
場合もあります。) 次のように山かっこでインクルードする場合:

#include <BracketedHeader.h>

「include」ディレクトリにあります。これらは、コンパイラーがコンパイル時にヘッダー ファイルを検索するように指示されるディレクトリです。これらはパラメーターとして渡すか、環境変数に設定できます。

提供されている例では、ディレクトリが重複している理由を明確に示しています。一般に、異なるアーキテクチャ固有のファイルは、異なるアーキテクチャの名前の付いたフォルダで区切られています提供されている例では、 AlphaアーキテクチャとARM
アーキテクチャ の異なる fcntl.h ファイルを見ています。コンパイラが使用するファイルは、コンパイル対象の CPU によって異なり、コンパイル時に使用するファイルがコンパイラに通知されます。

私の個人的な意見では、これをまだ知らない場合は、Linux カーネルを理解するのに間違ったところから始めている可能性があります。最初にCを研究してみてください

于 2012-10-22T03:28:05.340 に答える
-1

マニュアルページでヘッダーファイルの名前を調べてください...またはグーグルで検索してください。

于 2012-10-22T03:23:36.143 に答える