अविश्वसनीय रूप से असंभव है, आमतौर पर, आपको लाइब्रेरी की संपूर्ण सामग्री को आपके निष्पादन योग्य में इंजेक्शन नहीं मिलता है।
आप केवल सभी अपरिभाषित प्रतीकों को पूरा करने के लिए पर्याप्त हैं। यह वास्तव में पुस्तकालय का एक छोटा सा हिस्सा हो सकता है। एक पुस्तकालय में आम तौर पर ऑब्जेक्ट फ़ाइलों का एक सेट होता है, जिनमें से केवल आवश्यक हैं जो आपके निष्पादन योग्य में जुड़े होते हैं।
उदाहरण के लिए, यदि सी रनटाइम लाइब्रेरी में आपको केवल एक ही चीज कहा जाता है तो exit()
था, तो आपके निष्पादन योग्य में printf()
फ़ंक्शन का परिवार होने की संभावना नहीं होगी।
यदि आप सीधे ऑब्जेक्ट फ़ाइलों से जुड़े हैं, तो आपको एक मौका मिल सकता है, क्योंकि इन्हें शामिल किया जाएगा या नहीं (जब तक कि आपका लिंकर स्मार्ट नहीं है)।
लेकिन यह भी एक कठिन कार्य होगा क्योंकि निष्पादन योग्य में कोई जानकारी नहीं हो सकती है कि विशिष्ट ऑब्जेक्ट फ़ाइलों से कौन से कोड अनुभाग आए थे। यह संभावित रूप से करने योग्य है, लेकिन अगर कोई और तरीका है, तो मैं इसे पहले देख रहा हूं।
मुझे विशिष्ट प्रक्रिया स्पष्ट करते हैं:
- चार वस्तु फ़ाइलें,
a.o
, b.o
, c.o
और d.o
a()
, b()
, c()
और d()
क्रमशः कार्य शामिल। वे सभीabcd.a
संग्रह में जोड़े गए हैं।
- वे सभी स्टैंडअलोन (कोई निर्भरता नहीं) इस तथ्य को छोड़कर
b()
c()
पर कॉल करते हैं।
- आपके पास एक मुख्य प्रोग्राम है जो
a()
और b()
पर कॉल करता है और आप इसे संकलित करते हैं तो इसे abcd.a
लाइब्रेरी से लिंक करें।
- लिंकर
a.o
और b.o
पुस्तकालय से बाहर करने और अपने निष्पादन में, a()
और b()
के लिए की जरूरत को पूरा करने लेकिन c()
के लिए एक की जरूरत को शुरू खींच लेता है, क्योंकि b()
यह की जरूरत है।
- लिंकर तब
c.o
लाइब्रेरी से बाहर और आपके निष्पादन योग्य में ड्रग करता है, c()
की आवश्यकता को पूरा करता है। अब सभी अपरिभाषित प्रतीक संतुष्ट हैं, निष्पादन योग्य किया जाता है और धूल दिया जाता है, आप तैयार होने पर इसे चला सकते हैं।
उस प्रक्रिया में किसी भी चरण में d.o
आपके निष्पादन योग्य में खींच लिया गया था, इसलिए आपको इसे प्राप्त करने की शून्य उम्मीद है।
अद्यतन: पुन टिप्पणी मैं ऊपर बनाया "वहाँ एक और तरीका है, मुझे लगता है कि पहली पर विचार करना होता", तो आप सिर्फ अन्य उत्तर आप स्रोत है में से एक के लिए एक टिप्पणी में कहा गया है वह कोड जिसने पुस्तकालयों को निकाला है, जिसे आप निकालना चाहते हैं। मुझे पूछने की ज़रूरत है: आप उस स्रोत के साथ पुस्तकालयों का पुनर्निर्माण क्यों नहीं कर सकते?यह निष्पादन योग्य कोड के एक मोर से पुस्तकालयों को फिर से बनाने की कोशिश करने से मुझे एक बहुत आसान समाधान लगता है।
परिदृश्य पर, कई कस्टम वस्तु फ़ाइलें उन्हें एक ही कस्टम लाइब्रेरी फ़ाइल में लिंक होते हैं, और। यदि सभी पुस्तकालय कस्टम हैं, तो क्या वे निष्पादन योग्य में "पूर्ण एम्बेडेड" नहीं हैं? असल में मैं स्रोत कोड प्राप्त नहीं करना चाहता, मैं केवल लाइब्रेरी फाइलें प्राप्त करना चाहता हूं। – HyLian
यदि लाइब्रेरी में प्रत्येक ऑब्जेक्ट फ़ाइल को सभी अपरिभाषित प्रतीकों को पूरा करने के लिए आवश्यक है तो हाँ, वे सभी वहां होंगे। लेकिन यह जरूरी नहीं है कि मामला। – paxdiablo
चलो वापस कदम। आपके पास .sl/.a फ़ाइलें क्यों नहीं हैं? – paxdiablo