के लिए जीएनयू अद्वितीय ऑब्जेक्ट प्रतीकों के बिना बिल्डिंग मैं वर्तमान में कोड के बड़े ढेर के लिए बिल्ड सिस्टम को अपडेट करने पर काम कर रहा हूं, जिसमें लिनक्स सी ++ प्रोजेक्ट शामिल है। यह अच्छा होगा अगर यहां पर सभी डेवलपर्स अपने विचारों के साथ हैकिंग करते समय बिल्ड चला सकते हैं, इसलिए मैं जांच कर रहा था कि लक्ष्य प्रणाली 2.6.18 होने के बावजूद यह बेहद आधुनिक लिनक्स सिस्टम पर बनाना संभव होगा।जीसीसी/जी ++: पुराने लिनक्स कर्नेल
'अस्पष्ट आधुनिक' द्वारा मैं जीसीसी 4.5+ की तरह कुछ अनुमान लगा रहा हूं, जो कि पिछले वर्ष या दो में वितरण हो सकता है। वर्तमान में मैं libstdC++ समस्या को स्थिर रूप से संकलित करके हल करता हूं, और किसी भी glibc मुद्दों को रैपर कोड के त्वरित बिट के साथ memcpy प्रतीकों (और इतने पर) के पुराने संस्करणों को रीमेप करके चारों ओर अच्छी तरह से काम किया जाता है। अब तक सब ठीक है।
एक समस्या जिसे मैं पूरी तरह से समझने के लिए प्रतीत नहीं कर सकता हूं यह है कि .o फाइलों से निष्पादन योग्य में बनाए गए कुछ प्रतीक 'यू' प्रकार हैं, जो एक जीएनयू अद्वितीय वस्तु है, जो ईएलएफ मानक का विस्तार है 2.6.18 बिल्कुल पहचान नहीं आता है। इसका मतलब यह है कि निष्पादन योग्य नहीं चलेगा क्योंकि यह प्रतीकों को नहीं ढूंढ सकता है, हालांकि वे वास्तव में मौजूद हैं (लक्ष्य पर 'प्रकार' टाइप करें, 'एनएम' से)।
कोई G ++ संकलित करते समय जीएनयू अद्वितीय वस्तुओं के उपयोग को अक्षम कर सकता है लेकिन यह बिल्कुल सबसे सुविधाजनक समाधान नहीं है। कोड को संकलित करते समय मुझे इसे अक्षम करने का कोई तरीका नहीं दिख रहा है (distro gcc/g ++ के पास हमेशा इस विकल्प पर है), और मुझे लगता है कि लक्ष्य प्रणाली को पहचानने का एकमात्र तरीका यह है कि यह ld-linux और कर्नेल को अपडेट करना होगा । यह लगभग निश्चित रूप से होने वाला नहीं है।
क्या कोई विकल्प है जो मुझे इन प्रतीक प्रकारों को अक्षम करने के लिए नहीं मिला है? या शायद इस के आसपास कुछ साफ रास्ता है, या कुछ जो मुझे याद आ रही है? मुझे संदेह है कि इसे जी ++ 4.1.x पर संकलित करना होगा, जिसका मतलब पुराने लिनक्स इंस्टॉलेशन या स्रोत से होगा।
यदि यह एक गतिशील लिंकिंग प्रतीक प्रकार है, तो गतिशील लिंकर के साथ कोई समस्या होनी चाहिए, कर्नेल नहीं। यह कर्नेल से कैसे संबंधित है? – Hibou57
जबकि मैंने इसे आजमाया नहीं है, मुझे लगता है कि कर्नेल को बदले बिना libld को बदलना बहुत कठिन होगा - अगर यह संभव है। तो यह सीधे कर्नेल से संबंधित नहीं है, लेकिन तथ्य यह है कि मुझे उस कर्नेल को फिर से कंपाइल करना होगा या लिंकर को इन अन्य प्रतीकों को पहचानने के लिए बस ओएस को अपग्रेड करना होगा, जैसा कि मैं समझता हूं। – rhickman