まあ、明らかに違いがありますが、なぜいくつかは/usr/include/sysの下に置かれ、他のものは/usr/include/linuxの下に同じヘッダーファイル名で置かれるのだろうか。 ?これはPOSIX vx non-POSIXと関連がありますか?
また、kernel-headersパッケージをインポートし、Fedoraシステムのヘッダーで/usr/include/linuxを正常に入力しました。 /usr/include/sys ドキュメントの下のヘッダーを取得するために使用できる標準パッケージ名はありますか?私はそれを見つけることができませんでした。
ベストアンサー1
/usr/include/linux
以下とヘッダーは/usr/include/asm*
Linuxカーネルと共に配布されます。他のヘッダファイル(/usr/include/sys/*.h
など/usr/include/bits/*.h
)はCライブラリ(GNU Cライブラリ、すべての非埋め込みLinuxシステムではglibcとも呼ばれます)。少しglibc マニュアルの説明。
には/usr/include/linux
、/usr/include/asm
実行中のカーネルのヘッダーではなく、Cライブラリをコンパイルするために使用されたヘッダーを含める必要があります。そうでなく、一部の定数やデータ構造が変更されると、コンパイルされたプログラムとCライブラリの間に矛盾が発生し、競合が発生したり、さらに悪化したりする可能性があります。 (ヘッダがCライブラリと一致しているがCライブラリがカーネルと一致しない場合、実際に起こるのは、カーネルが安定したABIを維持するように設計されており、他のABIから呼び出されていることを検出する必要があることです。それに応じて解釈してください。変数はとにかく静的にコンパイルされたプログラムに対してこれを行う必要があります。)
私はしばらく前(10年?)この問題についてDebianとRed Hat/usr/include/linux
の間に熱い議論があったことを覚えています。どちらも明らかに自分たちの立場に固執しました。 (私が理解したように、上記のようにDebianは正しいです。)Debianの現在のディストリビューションと/usr/include/linux
友達は次のようになります。linux-libc-dev
カーネルソースからコンパイルされたがカーネルと共にアップグレードされなかったパッケージ。カーネルヘッダファイルはバージョン固有のパッケージにあり、次のものを提供します。linux-headers-2.6
メタパッケージは、特定のカーネルバージョン用のモジュールをコンパイルするために必要です。
探しているパッケージはCライブラリヘッダファイルです。名前が何であるかはわかりませんが、を通して知ることができますyum provides /usr/include/sys/types.h
。