0

この gcc コマンドでプログラムをコンパイルしようとしています:

gcc -c -fomit-frame-pointer -O2 sth.c

次のヘッダー ファイルが含まれます。

#include <linux/kernel.h>    //line 1
#include <linux/module.h>    //line 2
#include <sys/syscall.h>     //line 3
#include <linux/proc_fs.h>   //line 4
#include <linux/types.h>     //line 5
#include <linux/dirent.h>    //line 6
#include <asm/unistd.h>      //line 7

"no such file or directory"行 2、4、および 6 でエラーが発生しますが、それらは他の 4 と同じように配置されています/usr/src/kernels/3.10.14-100.fc18.x86_64/include/linux/

以前に(Makefileを使用して)(fedora 18)、このシステムにカーネルヘッダーファイルを含む他のプログラムをいくつかコンパイルしましたが、たとえば、dirent.hまたはのようなエラーは発生しなかったと確信していますproc_fs.h。これらの Makefile で考慮された gcc の他のオプションを使用する必要があると思います!

kernel-headerfiles実行中のカーネルとkernel-devel同じバージョンのパッケージがインストールされています。

4

1 に答える 1

1

ユーザー空間のカーネル ヘッダーは、/usr/include/linuxではなく にあり/usr/src/...ます。後者のパスには、ユーザー空間プログラムではなく、カーネル モジュール用のヘッダーが含まれています。

問題のプログラムが実際にカーネル モジュールである場合、カーネル モジュールには特別なビルド環境が必要なため、コンパイルするには KBuild を使用する必要があります。参照: KBuild とは何かを理解する

以下もご覧ください。

/usr/src/linux/Documentation/kbuild/modules.txt
于 2013-10-13T12:56:20.203 に答える