ความแตกต่างระหว่าง / usr / include / sys และ / usr / include / linux?


12

เห็นได้ชัดว่ามีความแตกต่าง แต่ฉันอยากรู้เกี่ยวกับเหตุผลที่อยู่เบื้องหลังว่าทำไมบางสิ่งไปภายใต้ / usr / include / sys และคนอื่นไปภายใต้ / usr / include / linux และมีชื่อไฟล์ส่วนหัวเดียวกัน? สิ่งนี้เกี่ยวข้องกับ POSIX vx ไม่ใช่ POSIX หรือไม่?

นอกจากนี้ฉันยังจัดการเติม / usr / include / linux ด้วยส่วนหัวในระบบ Fedora ของฉันด้วยการคว้าแพ็คเกจ kernel-headers มีชื่อแพ็คเกจมาตรฐานสำหรับฉันที่จะรับไฟล์ส่วนหัวที่อยู่ภายใต้ / usr / include / sys ? ฉันหามันไม่เจอ

คำตอบ:


14

ส่วนหัวภายใต้/usr/include/linuxและภายใต้/usr/include/asm*การกระจายกับเคอร์เนลลินุกซ์ ส่วนหัวอื่น ๆ ( /usr/include/sys/*.h, /usr/include/bits/*.hและอื่น ๆ อีกมากมาย) ถูกแจกจ่ายกับไลบรารี C (ไลบรารีGNU Cหรือที่รู้จักกันในชื่อ glibc บนระบบ Linux ที่ไม่ใช่แบบฝังทั้งหมด) มีเล็ก ๆ น้อย ๆ เป็นคำอธิบายในคู่มือ glibc

โปรดทราบว่า/usr/include/linuxและ/usr/include/asmควรมีส่วนหัวที่ใช้เมื่อรวบรวมไลบรารี C ไม่ใช่ส่วนหัวจากเคอร์เนลที่กำลังทำงาน มิฉะนั้นหากค่าคงที่หรือโครงสร้างข้อมูลบางอย่างเปลี่ยนแปลงไปจะมีความไม่สอดคล้องกันระหว่างโปรแกรมที่คอมไพล์และไลบรารี C ซึ่งมีแนวโน้มว่าจะทำให้เกิดความผิดพลาดหรือแย่ลง (หากส่วนหัวตรงกับไลบรารี C แต่ไลบรารี C ไม่ตรงกับเคอร์เนลสิ่งที่เกิดขึ้นจริงคือเคอร์เนลถูกออกแบบมาเพื่อรักษา ABI ที่เสถียรและต้องตรวจสอบว่ามันถูกเรียกภายใต้ ABI อื่นและตีความอาร์กิวเมนต์ syscall ตามลำดับ เคอร์เนลจะต้องทำสิ่งนี้สำหรับโปรแกรมที่คอมไพล์แล้ว)

ผมจำได้ว่าระหว่างการอภิปรายอุ่น Debian และหมวกสีแดงในขณะที่ (ทศวรรษที่ผ่านมา?) ที่ผ่านมาใน/usr/include/linuxปัญหา; เห็นได้ชัดว่าแต่ละด้านกำลังเกาะติดกับตำแหน่งของมัน (เท่าที่ฉันเข้าใจ Debian นั้นถูกต้องตามที่อธิบายไว้ข้างต้น) Debian ปัจจุบันกระจาย/usr/include/linuxและเพื่อน ๆ ในlinux-libc-devแพ็คเกจซึ่งรวบรวมจากแหล่งเคอร์เนล แต่ไม่อัพเกรดด้วยเคอร์เนล ส่วนหัวของเคอร์เนลอยู่ในแพคเกจเฉพาะรุ่นซึ่งมีlinux-headers-2.6metapackage นี่คือสิ่งที่คุณต้องรวบรวมโมดูลสำหรับเคอร์เนลรุ่นใดรุ่นหนึ่งโดยเฉพาะ

แพ็คเกจที่คุณต้องการคือส่วนหัวของไลบรารี C ผมไม่ทราบว่าสิ่งที่มันเรียกว่า yum provides /usr/include/sys/types.hแต่คุณสามารถหาออกมาด้วย


2
glibc-headersคำตอบบิตสุดท้ายคือ
mattdm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.