2010-08-08 7 views
5

यह अच्छी तरह से ज्ञात है कि glibc (और, जहां तक ​​मुझे पता है, glibstd ++ भी) प्रतीक संस्करण तंत्र का उपयोग करता है। (विवरण के लिए देखें: How can I link to a specific glibc version।)glibc (glibcxx) बाइनरी के संस्करण को कैसे निर्धारित किया जाए इस पर निर्भर करेगा?

सवाल यह है कि जीएलबीबीसी और जीएलबीबीसीओक्स के सटीक संस्करणों को निर्धारित करने के लिए लिंकर द्वारा libc और libstdC++ के नामों के लिए चुना जाएगा? उदाहरण के लिए, इस तरह कुछ कैसे प्राप्त करें:

time -> [email protected]_2_5 
... 
gethostbyname -> [email protected]_2_3 

हमें इसकी आवश्यकता क्यों है? ऐसा लगता है कि यदि आप glibc/libstdC++ के आवश्यक संस्करणों को कम करना चाहते हैं तो यह उपयोगी हो सकता है।

+0

आईआईआरसी डीएसओ-हाउटो (http://www.akkadia.org/drepper/dsohowto.pdf) के लिए लिंकर स्क्रिप्ट का उपयोग करने पर एक अनुभाग था। – ninjalj

उत्तर

9

एक चीज जो आप कोशिश कर सकते हैं objdump -T आपकी बाइनरी पर चल रही है।

यदि आप प्रतीकों के पुराने संस्करणों को जोड़ने पर विचार कर रहे हैं, तो ध्यान रखें कि ये पुराने संस्करण पुराने, विभिन्न संरचनाओं या अन्य परिभाषाओं पर भी निर्भर हो सकते हैं। इससे बचने के लिए, पुरानी, ​​मिलान करने वाली शीर्षलेख फ़ाइलों और पुस्तकालयों के साथ संकलित करें और लिंक करें।

+0

धन्यवाद, जिलों। यह काम करता हैं। एक और सवाल, कोड में स्थान कैसे प्राप्त करें जिससे गतिशील प्रतीक कहा जाता है? मेरा मतलब है, उदाहरण के लिए, यदि 'objdump -T' कुछ प्रविष्टि देता है, तो GLIBCXX_3.4.9 *** डालें *** ***, स्रोतों में कौन से फ़ंक्शंस इस प्रतीक का उपयोग करते हैं? – Shcheklein

+0

हम्म, मैं वास्तव में सभी .o फ़ाइलों पर objdump -t चलाने से बेहतर समाधान नहीं जानता और यह जांचता हूं कि फ़ंक्शन के संदर्भ में कौन से संदर्भ हैं। ऐसा लगता है कि यह बेहतर किया जा सकता है क्योंकि लिंकर जानता है कि एक अनसुलझा प्रतीक कहाँ इस्तेमाल किया गया था। – jilles

+0

ठीक है, धन्यवाद। वैसे भी यह एक और सवाल है ... – Shcheklein

संबंधित मुद्दे