いくつかのLinuxカーネルヘッダファイルを使ってプログラムをコンパイルしたいと思います。しかし、ちょうど追加すると-I/usr/src/linux-headers-4.4.0-36/include
見つかりませんlinux/export.h
。アーチ/建物amd64
、しかし、またはが見つかりませんx86_64
。uname -pmi
説明するx86_64 x86_64 x86_64
。私の場合、arch
正しいディレクトリは何ですか?
システムはリポジトリのLinux Mint
カーネルに付属しています4.4.0.-36
。
UPD:使いたいです
#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>
こんにちは。cpp:
#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>
int main ()
{
return 0; // nothing
}
しかし、コンパイラは-I /usr/src/linux-headers-4.4.0-36/include -I /usr/src/linux-headers-4.4.0-36/arch/x86/include
多くのオーバーライドが見つからないと言います<generated/timeconst.h>
。で見つけました/usr/src/linux-headers-4.4.0-36-generic/include
。ただし、ディレクトリの同じパスに対しても-generic
いくつかのエラーが発生します。
答え1
32ビットと64ビットのバリエーションを含むほとんどのアーキテクチャはarch
同じサブディレクトリにあります。これは時間の経過とともに2.6.24x64_64
にマージされ、2.6.25にマージされ、2.6.29にマージされました。 4.7以降、まだ別のアーキテクチャです。 2.6.14に移動し、2.6.27で最終的にマージされました。 2.6 初めにマージされました。x86
sh64
sh
sparc64
sparc
arm64
ppc64
powerpc
ppc
mips64
したがって、amd64ヘッダーはarch/x86
。
しかし、通常、カーネルヘッダではなくlibcヘッダに対してプログラムをコンパイルします。 (時には同じ名前でも内容が異なります!)実際にカーネルヘッダファイルが必要かどうかを確認してください。これは、カーネルバージョン間で変更される可能性がある不安定なインターフェイス(たとえば、いくつかの低レベルのデバッグインターフェイス)を使用するプログラムでのみ発生します。 。