/ usr / include / sysと/ usr / include / linuxの違いは?


12

まあ、明らかに違いがありますが、なぜ/ usr / include / sysの下にあるものと/ usr / include / linuxの下にあり、同じヘッダーファイル名を持つものがあるのか​​、その背後にある合理性に興味がありますか?これはPOSIX vx非POSIXと関係がありますか?

また、カーネルヘッダーパッケージを取得することで、/ usr / include / linuxに私のFedoraシステムのヘッダーを挿入できました。/usr/include/sysの下にあるヘッダーファイルを取得するための標準パッケージ名があります。 ?私はそれを見つけることができませんでした。

回答:


14

under /usr/include/linuxおよびunder ヘッダー/usr/include/asm*は、Linuxカーネルとともに配布されます。他のヘッダは(/usr/include/sys/*.h/usr/include/bits/*.hおよびより多くの)はCライブラリ(と一緒に配布されているGNU Cライブラリ、また、すべての非組み込みLinuxシステムでは、glibcのとして知られています)。glibcのマニュアルに少し説明があります

実行中のカーネルのヘッ​​ダーではなく、Cライブラリのコンパイル時に使用されたヘッダーが含まれることに注意し/usr/include/linux/usr/include/asmください。そうしないと、いくつかの定数またはデータ構造が変更された場合、コンパイルされたプログラムとCライブラリの間に不整合が生じ、クラッシュまたはさらに悪化する可能性があります。(ヘッダーがCライブラリと一致するが、Cライブラリがカーネルと一致しない場合、実際に起こるのは、カーネルが安定したABIを維持するように設計されており、異なるABIで呼び出されたことを検出し、それに応じてsyscall引数を解釈する必要があることです。とにかく、カーネルは静的にコンパイルされたプログラムに対してこれを行う必要があります。)

DebianとRed Hatの間でこの/usr/include/linux問題についてしばらく(10年?)熱く議論されたことを覚えています。明らかに、それぞれの側がその位置に固執しています。(私が理解している限り、Debianは上で説明したように正しいです。)Debianは現在、カーネルソースからコンパイルされているが、カーネルでアップグレードされていないパッケージで配布されて/usr/include/linuxおり、友だちlinux-libc-devです。カーネルヘッダーは、linux-headers-2.6メタパッケージを提供するバージョン固有のパッケージに含まれています。これは、特定のカーネルバージョンのモジュールをコンパイルするために必要なものです。

探しているパッケージはCライブラリのヘッダーです。それが何と呼ばれるのかはわかりませんが、で確認できますyum provides /usr/include/sys/types.h


2
最後のビットに対する答えはglibc-headersです。
mattdm 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.