ส่วนหัวภายใต้/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.6
metapackage นี่คือสิ่งที่คุณต้องรวบรวมโมดูลสำหรับเคอร์เนลรุ่นใดรุ่นหนึ่งโดยเฉพาะ
แพ็คเกจที่คุณต้องการคือส่วนหัวของไลบรารี C ผมไม่ทราบว่าสิ่งที่มันเรียกว่า yum provides /usr/include/sys/types.h
แต่คุณสามารถหาออกมาด้วย
glibc-headers
คำตอบบิตสุดท้ายคือ