के तहत /usr/include/linux
और हेडर /usr/include/asm*
लिनक्स कर्नेल के साथ वितरित किए जाते हैं। अन्य हेडर ( /usr/include/sys/*.h
, /usr/include/bits/*.h
और कई और अधिक) सी लाइब्रेरी के साथ वितरित किए जाते हैं ( जीएनयू सी लाइब्रेरी , जिसे ग्लिबैक के रूप में भी जाना जाता है, सभी गैर-एम्बेडेड लिनक्स सिस्टम पर)। ग्लिबेक मैनुअल में थोड़ी व्याख्या है ।
ध्यान दें कि /usr/include/linux
और /usr/include/asm
वे हेडर होने चाहिए जो C लाइब्रेरी को संकलित करते समय उपयोग किए गए थे, न कि चलने वाले कर्नेल से हेडर। अन्यथा, यदि कुछ स्थिरांक या डेटा संरचनाएं बदल जाती हैं, तो संकलित कार्यक्रम और सी लाइब्रेरी के बीच असंगति होगी, जिसके परिणामस्वरूप दुर्घटना या खराब होने की संभावना है। (यदि हेडर्स C लाइब्रेरी से मेल खाते हैं, लेकिन C लाइब्रेरी कर्नेल से मेल नहीं खाती है, तो वास्तव में क्या होता है कि कर्नेल को एक स्थिर ABI रखने के लिए डिज़ाइन किया गया है और यह पता लगाना चाहिए कि यह एक अलग ABI के तहत कहा जाता है और तदनुसार syscall तर्कों की व्याख्या करता है। कर्नेल को वैसे भी संकलित कार्यक्रमों के लिए ऐसा करना चाहिए।)
मुझे याद है कि इस /usr/include/linux
मुद्दे पर कुछ समय पहले डेबियन और रेड हैट के बीच गर्म बहस हुई थी ; जाहिरा तौर पर प्रत्येक पक्ष अपनी स्थिति से चिपका हुआ है। (जहां तक मैं इसे समझता हूं, डेबियन सही है, जैसा कि ऊपर बताया गया है।) डेबियन वर्तमान /usr/include/linux
में linux-libc-dev
पैकेज में वितरित करता है और दोस्तों , जो कि कर्नेल स्रोतों से संकलित किया गया है लेकिन कर्नेल के साथ अपग्रेड नहीं किया गया है। कर्नेल हेडर संस्करण-विशिष्ट पैकेज में हैं जो linux-headers-2.6
मेटापैकेज प्रदान करते हैं ; यह वह है जो आपको किसी विशेष कर्नेल संस्करण के लिए मॉड्यूल संकलित करने की आवश्यकता है।
जिस पैकेज की आपको तलाश है, वह सी लाइब्रेरी हेडर है। मुझे नहीं पता कि इसे क्या कहा जाता है, लेकिन आप इसका पता लगा सकते हैं yum provides /usr/include/sys/types.h
।
glibc-headers
।