हमारा अभिकलन क्लस्टर एक पुराने कर्नेल (2.6.18) और निश्चित रूप से, पुराने लिबास और बायनेरिज़ के साथ CentOS का एक बहुत पुराना संस्करण चलाता है। क्योंकि पूरी बात को अपडेट करने के लिए सभी नोड्स पर बहुत काम करने की आवश्यकता होती है, यह एक विकल्प नहीं है।
मैं एक प्रोग्राम को संकलित करने और उपयोग करने की कोशिश कर रहा हूं जिसके लिए C++11और gcc(और / या clang) के नए संस्करणों की आवश्यकता है । क्योंकि मैं सिस्टम के साथ बिल्कुल भी गड़बड़ नहीं करना चाहता, इसलिए मैं इसे कुछ स्थानीय निर्देशिका ट्री में नॉन-रूट उपयोगकर्ता के रूप में करना चाहता हूं।
समस्या यह है, कि मशीन (s) पर मौजूद की तुलना में एक gccनए की आवश्यकता है glibc। इसलिए, मुझे glibcअपने स्थानीय lib/पेड़ के एक अलग, नए संस्करण को बनाए रखने की आवश्यकता है , शायद यहां वर्णित है ।
जहां मैं खो गया हूं, मैं अपने स्थानीय परिवादों के पथों को सभी आवश्यक बायनेरिज़, अर्थात gcc, g++आदि में "हार्डकोड" कैसे करूं ? LD_LIBRARY_PATH को मेरे स्थानीय lib/पेड़ पर सेट करने से सभी सिस्टम बायनेरिज़ को अब काम नहीं करने का कारण बनता है ( ELF file OS ABI invalid) क्योंकि वे मेरे नए libm.so/ libc.soजिसके खिलाफ वे संकलित नहीं किए गए हैं का उपयोग करना चाहते हैं ।
तो, इसे लपेटने के लिए: एक पुरानी प्रणाली के समानांतर एक नए, स्थानीय विकास ढेर (युक्त glibc, gccआदि) को बनाए रखने का एक उचित तरीका क्या है ?
एक पक्ष के प्रश्न के रूप में: LD_LIBRARY_PATH को अलग करने के बाद SE पर सभी समाधान के रूप में पोस्ट किया जाता है glibc। मेरे लिए, यह उपरोक्त त्रुटियों का कारण बनता है जब मैं किसी भी सिस्टम बाइनरी (जैसे ls) को निष्पादित करने का प्रयास करता हूं । कैसे? क्या मैंने कुछ गलत किया है या यह इच्छित व्यवहार है?