c++ - Why do I have to pass libraries in the end of linker line? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 2 जवाब

इस तरह से कमांड काम करेगा:

  (एलडी) $ (एलडीएफएएलजीएस) - एक पुनःपिप। एप newlib / crt0.o reip.o renetif.o fs.o httpd.o liblwip.a newlib / libc.a   

लेकिन अगर मैं * * * .o फ़ाइलों से पहले * करता हूं - यह libs से फ़ंक्शन नहीं मिल पायेगा।

मैंने कुछ पुरानी परियोजनाओं के माध्यम से खोज की और पाया इस तरह की मेन्फ़ाइल लाइनें: <प्री> $ (सीसी) $ (LIBS) -ओ $ (टार्जेट) ज्यूकबॉक्समैन.ओ ज्यूकबॉक्सप्लेयर.ओ ...

जो या तो तब तक काम नहीं करता जब तक कि मैं लाइन के अंत तक $ (LIBS) को स्थानांतरित नहीं करता लेकिन मुझे याद है कि यह मेरे लिए बहुत समय पहले काम कर रहा था। क्या कोई जवाब दे सकता है कि क्या बदला गया है और यह अब क्यों काम नहीं करता है) मैं कम्पाइलर, लिंकर्स और अन्य टूल के साथ खेलने का बड़ा प्रशंसक नहीं हूं - मैं ज्यादातर कुछ बनाना चाहता हूं;)

मैं आपको जवाब नहीं दे सकता कि आपको लगता है कि इससे पहले कि आपने काम किया हो। लेकिन मैं आपको बता सकता हूं कि यह सामान्य रूप से काम क्यों नहीं करता है। अधिकांश पीओएसआईएसआईएस-शैली लिंकर, जिसमें जीएनयू binutils ld जीएनयू / लिनक्स और अन्य पर उपयोग किया जाता है, सिंगल-पास लिंकर्स हैं।

इसका अर्थ है कि वे कमांड लाइन में सूचीबद्ध तत्वों को एक बार से अंत तक चलते हैं और वे वापस नहीं जाते हैं। जब लिंकर शुरू होता है, तो यह मूल रूप से एक प्रतीक, मुख्य की तलाश में है। चूंकि यह कमांड लाइन चलता है, कोई भी ऑब्जेक्ट फ़ाइल ( foo.o ) लिंकर ढूँढता हमेशा निष्पादन योग्य में जोड़ा जाता है। ऑब्जेक्ट उन प्रतीकों की एक सूची प्रदान करता है जिन्हें परिभाषित किया जाता है, और एक सूची जो अनिर्धारित (अन्य ऑब्जेक्ट से जरूरी)।

जब लिंकर एक स्थैतिक पुस्तकालय ( libfoo.a ) को हिट करता है , यह उस पुस्तकालय में ऑब्जेक्ट फाइलों के माध्यम से दिखता है और यदि कोई ऑब्जेक्ट में कोई भी प्रतीक शामिल होता है जिसे लिंकर की आवश्यकता होती है, तो वह उस ऑब्जेक्ट को एक्जीक्यूटेबल में जोडता है। यदि इसमें किसी भी प्रतीक को लिंकर की ज़रूरत नहीं है, तो यह रुक जाती है उस ऑब्जेक्ट।

कमांड लाइन के अंत में, अगर कोई प्रतीक आवश्यक था, लेकिन नहीं मिला, तो लिंक असफल हो जाता है।

इसलिए, आप यह सुनिश्चित करने के लिए देख सकते हैं कि एक ही पास में सबकुछ पाया जाता है, पुस्तकालयों से संबंधित चीजों की ज़रूरत होती है उन पुस्तकालयों को जो उन प्रदान करती हैं पहले प्रतीक, या अन्य जब लिंकर अपने एकल पास में पुस्तकालय को हिट कर देता है, तो यह नहीं पता होगा कि पुस्तकालयों की आवश्यकता है और उन्हें छोड़ देगा।


Comments