2010-04-21 14 views
18

के साथ फ्रीस्टैंडिंग पर्यावरण के लिए संकलित करें जिस कोड पर मैं काम कर रहा हूं, वह होस्टेड और फ्रीस्टैंडिंग वातावरण दोनों के लिए निर्माण करना संभव है, जो बाद के मामले के लिए कुछ stdlib कार्यों के लिए निजी कार्यान्वयन प्रदान करना संभव है।जीसीसी

क्या मैं विश्वसनीय रूप से सामान्य वर्कस्टेशन/बिल्ड सर्वर पर जीसीसी के साथ इसका परीक्षण कर सकता हूं?

  • "-ffreestanding" विकल्प होनहार देखा, लेकिन ऐसा लगता है कि यह "केवल" बनाया-इन को अक्षम कर देता है और ठीक से STDC_HOSTED मैक्रो सेट, यह अभी भी सभी सिस्टम हेडर प्रदान करता है।

  • विकल्प "-नोस्टडिंक" बहुत प्रतिबंधित है; मैं अभी भी एक फ्रीस्टैंडिंग कार्यान्वयन (विशेष रूप से stddef.h और limit.h) के लिए आवश्यक हेडर का उपयोग करना चाहता हूं।

मुझे यहां क्या याद आ रही है?

ओह, और मैं इस समय के लिए जीसीसी 4.4.3 का उपयोग कर रहा हूं, "जल्द ही" 4.5.0 में अपग्रेड हो जाएगा।

+0

जिज्ञासु ... तुम क्यों फ्रीस्टैंडिंग के लिए निर्माण कर रहे हैं? क्या आप उन कट्टर "/ sbin" कार्यक्रमों में से एक बना रहे हैं? क्या आप कर्नेल लिख रहे हैं? मैंने कस्टम लिनक्स के संदर्भ में केवल "-फ्रेस्टैंडिंग" देखा है। –

+0

संक्षिप्त उत्तर बाजार की मांग है। एम्बेडेड/मोबाइल पक्ष पर हमारे कुछ ग्राहक चाहते हैं कि हमारा उत्पाद पूरी तरह आत्मनिर्भर हो। – Christoffer

उत्तर

18

ठीक है, चूंकि कोई जवाब नहीं दिया गया है, इसलिए मैं यह भी वर्णन कर सकता हूं कि मैंने यह काम कैसे किया। यह बहुत आसान है हालांकि लक्ष्य प्रणाली के आधार पर यह कठिन हो सकता है।

"नोस्टडिंक" का उपयोग करने का अर्थ है कि मानक प्रणाली में पथ शामिल किए जाएंगे; अन्य शामिल-पथ "-आई" के साथ दिए गए पथ निश्चित रूप से शीर्षकों के लिए खोजे जाएंगे।

तो, फ्रीस्टैंडिंग निर्माण लक्ष्य के लिए मैं एक फ़ोल्डर 'शामिल-फ्रीस्टैंडिंग-C89' और प्रासंगिक प्रणाली हेडर लिंक बना सकते हैं - float.h, iso646.h, limits.h, stdarg .h और stddef.h - वहां। आपके प्लेटफ़ॉर्म के आधार पर अन्य हेडर इन्हें शामिल किया जा सकता है, इसलिए आपको कुछ शोध करना पड़ सकता है और अधिक लिंक सेट कर सकते हैं (इसलिए यदि आपको कई लक्षित प्लेटफॉर्म के लिए ऐसा करने की आवश्यकता है तो थकाऊपन)।

C89 निर्देशिका तो के लिए आधार के रूप में इस्तेमाल किया जा सकता 'शामिल-फ्रीस्टैंडिंग-c99', लिंक करने के लिए अतिरिक्त हेडर stdbool.h और stdint.h

कमांड लाइन का उपयोग करना है कर रहे हैं तो

gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89 

या

gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99 
2

यह एक्सईएन Makefilegcc -print-search-dirsstddef.h और इसी तरह के साथ निर्देशिका पाने के लिए है, तो उपयोग करता -isystem साथ जोड़ लेता है, -nostdinc का उपयोग करता है के निर्माण के लिए:

https://github.com/mirage/xen/blob/2676bc915157ab474ee478d929b0928cf696b385/stubdom/Makefile#L35