/usr/include/sysと/usr/include/linuxの違いは何ですか?

/usr/include/sysと/usr/include/linuxの違いは何ですか?

まあ、明らかに違いがありますが、なぜいくつかは/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

おすすめ記事