ऑब्जेक्ट फ़ाइल के 3 प्रकार हैं।
स्थानांतरित करने योग्य ऑब्जेक्ट फ़ाइलें
एक निष्पादन योग्य ऑब्जेक्ट फ़ाइल बनाने के लिए लिंक के समय अन्य रीसोकेबल ऑब्जेक्ट फ़ाइलों के साथ जोड़ा जा सकता है कि एक रूप में मशीन कोड कंटेनर।
यदि आपके पास a.c
स्रोत फ़ाइल है, तो जीसीसी के साथ उसकी ऑब्जेक्ट फ़ाइल बनाने के लिए आपको चलना चाहिए:
gcc a.c -c
पूरी प्रक्रिया होगी: प्रीप्रोसेसर (सीपीपी) एसी पर चलेगा इसका आउटपुट (स्टिल सोर्स) कंपाइलर (cc1) में फीड होगा। इसका आउटपुट (असेंबली) असेंबलर (अस) में फीड होगा, जो प्रोड्यूस करेगा relocatable object file
। उस फ़ाइल में ऑब्जेक्ट कोड और लिंकिंग (और डिबगिंग अगर -g
इस्तेमाल किया गया था) मेटाडेटा शामिल है, और सीधे निष्पादन योग्य नहीं है।
साझा की गई फ़ाइलें
विशेष प्रकार की रिलोसेबल ऑब्जेक्ट फ़ाइल जो गतिशील रूप से लोड की जा सकती है, या तो लोड समय पर, या रन टाइम पर। साझा पुस्तकालय इस प्रकार की वस्तुओं का एक उदाहरण हैं।
निष्पादन योग्य ऑब्जेक्ट फ़ाइलें
कंटेनर मशीन कोड जिसे सीधे मेमोरी में लोड किया जा सकता है (लोडर द्वारा, उदाहरण के लिए निष्पादित ) और बाद में निष्पादित किया जाता है।
कई पर लिंकर चलाने का परिणाम relocatable object files
है a executable object file
। लिंकर सभी इनपुट ऑब्जेक्ट फाइलों को कमांड लाइन से, बाएं से दाएं, सभी एक ही प्रकार के इनपुट सेक्शन (जैसे .data
) को एक ही प्रकार के आउटपुट सेक्शन में मर्ज कर देता है । यह उपयोग करता है symbol resolution
और relocation
।
बोनस पढ़ा:
जब static library
इनपुट ऑब्जेक्ट्स में संदर्भित फ़ंक्शंस के खिलाफ लिंक को अंतिम निष्पादन योग्य में कॉपी किया जाता है। इसके dynamic libraries
बजाय एक प्रतीक तालिका बनाई गई है जो लाइब्रेरी के कार्यों / ग्लोबल्स के साथ एक गतिशील लिंकिंग को सक्षम करेगी। इस प्रकार, परिणाम एक आंशिक रूप से निष्पादन योग्य वस्तु फ़ाइल है, क्योंकि यह पुस्तकालय पर निर्भर करता है। यदि लाइब्रेरी मौजूद नहीं है, तो फ़ाइल अब निष्पादित नहीं हो सकती है)।
लिंकिंग प्रक्रिया निम्नानुसार की जा सकती है:
ld a.o -o myexecutable
आदेश: gcc a.c -o myexecutable
बिंदु 1 और बिंदु 3 पर वर्णित सभी आदेशों को लागू करेगा (cpp -> cc1 -> as -> l1 1 )
1: वास्तव में collect2 है, जो ld पर एक आवरण है।