आप उपयोगिता objcopy
के बारे में जानना चाहते हैं, जो आमतौर पर जीसीसी के साथ उपलब्ध होता है। यह उपकरण के binutils पैकेज का एक घटक है, जिसमें से सबसे दृश्यमान सदस्य लिंकर है, ld
।
प्रक्रिया यह है कि आप अपनी स्रोत फ़ाइल संकलित करते हैं और उन्हें सामान्य रूप से सामान्य रूप से लिंक करते हैं। यह आपको एल्फ (या एक अन्य स्थानापन्न प्लेटफार्म-निर्भर बाइनरी) प्रारूप में एक निष्पादन योग्य निष्पादन योग्य बनाता है। फिर आप निष्पादन योग्य को एक फ्लैट बाइनरी छवि में बदलने के लिए objcopy का उपयोग करें।
यह रोम से चलाने के लिए कोड तैयार करने के लिए सबसे उपयोगी है, जहां आप यह सुनिश्चित करना चाहते हैं कि आप अपने लक्षित प्लेटफ़ॉर्म के लिए उपयुक्त सी रनटाइम लाइब्रेरी का उपयोग कर रहे हैं, और संभवतः लिंकर स्क्रिप्ट फ़ाइल को अनुकूलित करने के साथ-साथ प्रदान करने की आवश्यकता है अपने स्वयं के सी रनटाइम स्टार्टअप कोड।
यदि आपका लक्ष्य किसी ऐसी प्रक्रिया को प्राप्त करना है जो किसी .so फ़ाइल की तरह है, तो मौजूदा प्रक्रिया में लोड किया जाना चाहिए, तो ध्यान रखें कि साझा लाइब्रेरी लोडर के कुछ काम वास्तव में लिंकिंग को समाप्त करना है ताकि प्रतीक .so फ़ाइल में जो मुख्य निष्पादन योग्य (या अन्य .so फ़ाइलों) में पते का संदर्भ लेता है, लोड समय पर हल हो जाता है। Objcopy का उपयोग करना ऐसा नहीं करेगा, और इसलिए आपके मौजूदा सी रनटाइम लाइब्रेरी और ऑब्जेक्ट्स को सही तरीके से उपयोग करने के लिए इस तरह से लोड किए गए फ़ंक्शंस के लिए मुश्किल हो सकती है।
अपने लक्ष्यों के बावजूद, आपको किसी ज्ञात पते पर अपनी बाइनरी का पता लगाने के लिए लिंकर के नियंत्रण को जब्त करने की आवश्यकता होगी। ऐसा करने के लिए, आपको एक लिंकर स्क्रिप्ट तैयार करने की आवश्यकता होगी। स्क्रिप्ट भाषा के लिए प्रलेखन the binutils manual में है। यदि आप किसी प्रारंभिक वैश्विक चर के लिए योजना बनाते हैं तो आप मुख्य रूप से ".text *" खंडों में और संभवतः ".rodata *" खंडों में रुचि रखते हैं। असल में उस प्रारंभिक व्यवस्था की व्यवस्था पाठक के लिए एक अभ्यास के रूप में छोड़ दी गई है।
कुल मिलाकर, यह सिर्फ एक बहुत बड़े हिमशैल की नोक है। मैं एक क्रॉस कंपाइलर निर्माण के साथ कुछ समय बिताने का सुझाव देता हूं कि यह देखने के लिए कि इन चीजों का अभ्यास कैसे किया जाता है। एवीआर और एमएसपी 430 समुदाय जीसीसी का उपयोग करते हैं, सक्रिय भागीदारी करते हैं, और सस्ती (और अक्सर ओपन सोर्स) हार्डवेयर शुरू करने के लिए करते हैं।
यह कोई ऑब्जेक्ट फ़ाइल नहीं है? – aaronasterling
नहीं, कम से कम, ऑब्जेक्ट फ़ाइलों में वे कौन से प्रतीक निर्यात करते हैं (लिंकर द्वारा उपयोग के लिए) –
कोई विशिष्ट कारण है कि आप इसके बजाय एक डीएल/साझा लाइब्रेरी का उपयोग नहीं करना चाहते हैं? कच्चे बाइनरी के साथ नुकसान का एक * बहुत * है। – snemarch