जहां तक ​​​​मुझे पता है, लिंकर का काम एक स्थिर पुस्तकालय में परिभाषित प्रतीकों के साथ किसी ऑब्जेक्ट फ़ाइल में अपरिभाषित प्रतीकों से मेल खाना है। यदि पाया जाता है, तो उचित प्रतीक परिभाषा को अंतिम निष्पादन योग्य में शामिल किया जाता है। यह तथाकथित प्रतीक संकल्प है।

तो क्या होगा यदि सभी प्रतीकों को स्थिर पुस्तकालय से हटा दिया जाए? क्या यह लिंकर को प्रतीकों को सही ढंग से हल करने से रोकता है?

0
Ignorant 18 अक्टूबर 2020, 12:27

1 उत्तर

सबसे बढ़िया उत्तर

स्ट्रिपिंग सिंबल एक ऐसा ऑपरेशन है जो आमतौर पर प्रतीकों पर डीबग जानकारी को हटाने के लिए होता है, वास्तविक लिंकिंग प्रक्रिया के लिए आवश्यक प्रतीकों को नहीं (हालांकि इसका उपयोग उन चीजों के लिए प्रतीकों को हटाने के लिए किया जा सकता है जो आप नहीं चाहते लिंकिंग प्रक्रिया में उपयोग किया जाता है, उदाहरण के लिए, आपने ऑब्जेक्ट फ़ाइल नहीं बनाई है)।

पुस्तकालयों या ऑब्जेक्ट फ़ाइल को जोड़ने के लिए बेकार प्रस्तुत करने के लिए यह उपकरण का एक बुरा उपयोग होगा।

मुझे गलत मत समझो, आप वास्तव में ऐसा कर सकते हैं, उदाहरण के लिए, strip --strip-all, ऐसा करना समझदारी की बात नहीं है। उदाहरण के लिए, prog1.c और prog2.c फाइलों पर विचार करें:

// prog1.c
int fn(void);
int main(void) { return fn(); }

// prog2.c
int fn(void) { return 42; }

इन फ़ाइलों पर निम्न आदेश चला रहा है:

gcc -o prog1.o -c prog1.c
gcc -o prog2.o -c prog2.c
strip --strip-all prog2.o
gcc -o prog prog1.o prog2.o

लिंकर त्रुटि का परिणाम होगा क्योंकि यह fn() नहीं ढूंढ सकता - इसे prog2.o से हटा दिया गया है। हालांकि, strip को छोड़कर समान कमांड निष्पादित करना ठीक काम करेगा।

2
paxdiablo 24 अक्टूबर 2020, 14:46