मैं समझने की कोशिश कर रहा हूं कि g ++ libstdC++ का कौन सा संस्करण चुनता है और इसका अर्थ यह है कि लाइब्रेरी का "सिस्टम" संस्करण अलग है। ।कंपाइलर libstdC++ संस्करण बनाम सिस्टम संस्करण
-rwxr-xr-x 1 root root 4397810 May 18 2007 /opt/gcc4.1.2/lib/libstdc++.so.6.0.8
ABI की मेरी समझ पर आगे आधार पर:
मैं उपयोग कर रहा हूँ जीसीसी/जी ++ 4.1.2, जो ABI Guidelines दस्तावेज़ के अनुसार, libstdC++ so.6.0.8, और यकीन है कि पर्याप्त शामिल -compatibility, मैं g ++ 4.1.2 के साथ निर्माण कर सकता हूं और कोड को 6.0.8 से libstdC++ के बाद के संस्करण के साथ सिस्टम पर चलाने की उम्मीद करता हूं, लेकिन पहले संस्करण के साथ एक पर नहीं, क्योंकि उसके पास एबीआई का पुराना संस्करण होगा ।
एक ही मशीन पर के एक पुराने संस्करण है libstdC++ में/usr/lib:
-rwxr-xr-x 1 root root 804288 Jul 22 2005 /usr/lib/libstdc++.so.6.0.3
अगर मैं इस मशीन पर जी ++ 4.1.2 का उपयोग कर कोड संकलन है, तो यह ldd, मैं के संस्करण देख libstdC++ में/usr/lib संदर्भित है, जो 6.0.3 है:
# ldd test
.
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x005b6000)
.
यह आशा की जाती है, के रूप में/usr/lib पहले चेक किया गया है। और आवेदन ठीक चलाता है।
मेरा सवाल है: यहां क्या हुआ है?
क्या जी ++ 4.1.2 libstdC++ के संस्करण के खिलाफ जुड़ा हुआ है। तो यह उस रिलीज का हिस्सा है (6.0.8)? यदि हां, तो निष्पादन योग्य पुराने संस्करण को/usr/lib में रनटाइम पर कैसे उपयोग कर सकता है, जब उसके पास पुरानी एबीआई हो? भाग्य?
या जी ++ 4.1.2 ने लिंक समय पर libstdC++ (6.0.3) के/usr/lib संस्करण को उठाया है और इसका उपयोग किया है, क्योंकि यह लाइब्रेरी पथ को उसी तरह से हल करता है जैसे एक्जिक्यूटिव रनटाइम पर करते हैं? क्या g ++ ऐसा कर सकता है, भले ही libstdC++ उसका "स्वयं" संस्करण न हो? G ++ 4.1.2 (6.0.8) में libstdC++ संस्करण का उद्देश्य क्या है? क्या इस प्रक्रिया में इसका इस्तेमाल किया गया है?
किसी भी अंतर्दृष्टि की सराहना की।
कंपाइलर/लिंकर 6.0.8 चुनता है, रनटाइम लोडर 6.0.3 चुनता है। यह अच्छी तरह खत्म हो सकता है या नहीं। लाइब्रेरी को ढूंढने के लिए रनटाइम लोडर को बताने के लिए, लिंकर ('-Wl, -rpath ... 'जब gcc/g ++ से कहा जाता है) के लिए' -rpath/path/to/folder/with/lib' तर्क 'का उपयोग करें। वैसे 4.1.2 प्राचीन कई बार खत्म हो गया है। –
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html –