2011-10-23 6 views
7

प्रश्न अपेक्षाकृत सीधे आगे है: मैं 4.x श्रृंखला (binutils और दोस्तों के साथ) का जीसीसी कैसे बना सकता हूं जो एक ही आर्किटेक्चर पर 2.4 एबीआई को संकलक के मेजबान के रूप में लक्षित करता है?मेजबान के समान वास्तुकला पर 2.4.x कर्नेल को लक्षित करने के लिए आधुनिक (4.x) जीसीसी बनाएं?

मेजबान सिस्टम x86 या x86_64 होगा और एकमात्र आवश्यकता यह है कि निर्मित ईएलएफ फाइल पुराने कर्नेल पर चलती है जब तक एबीआई मैचों। (कर्नेल स्रोत/शीर्षलेख मौजूद हैं)

एक संगत libc की आवश्यकता भी इसके साथ-साथ इसे जोड़ने के लिए भी आवश्यक होगी। हालांकि, मैं गतिशील रूप से इसके खिलाफ भी लिंक कर सकता हूं, क्योंकि मुझे (g) libc संस्करण पता है।

किसी भी पॉइंटर्स की बहुत सराहना की जाएगी। मैं crosstool-ng से कुछ हद तक परिचित हूं, लेकिन यह अब भी 2.4 कर्नेल का समर्थन नहीं करता है (स्पष्ट कारणों से)।

+2

तकनीकी शब्दों में, वह कैसे सबसे आधुनिक वितरण द्वारा इस्तेमाल किया लोगों की तुलना में कम ABI लक्षित करते हैं, और एक प्राप्त करने के लिए यह पता लगाने के लिए देख रहा है ईएलएफ बाइनरी के संगत रूप से कम। नोट। एबीआई-टैग अनुभाग। मुझे इस बारे में कहीं भी वेब पर जानकारी नहीं मिल रही है, इसलिए मुझे लगता है कि यह एक सुंदर विशेष अनुरोध है। शायद आप [email protected] मेलिंग सूची को ईमेल करना चाहते हैं। –

+0

@ केन ब्लूम: धन्यवाद। अच्छा विचार। वास्तव में मुझे कोई संकेत नहीं मिला, इसलिए मैंने सोचा कि मैं यहां पूछूंगा :) – 0xC0000022L

उत्तर

1

शायद पुराने ओएस पर एक आधुनिक उपकरण श्रृंखला स्थापित करने का सबसे आसान तरीका है।

आरएचईएल 2.1 या 3 सबसे अच्छा हो सकता है, क्योंकि वे हाल ही में समर्थित थे।

संकलन जीसीसी 4 मुश्किल हो सकता है क्योंकि आपको गणित पुस्तकालयों की भी आवश्यकता होगी। आपको एक बहु-चरण दृष्टिकोण करना पड़ सकता है।

संपादित करें:

नए जीसीसी संकलन के लिए:

  1. संकलित नवीनतम मेक - पथ
  2. अनपैक जीसीसी
  3. अनपैक mpfr, जीएमपी, जीसीसी निर्देशिका
  4. सिमलिंक में एमपीसी में जोड़ें बेस (mpfr, gmp, mpc) के लिए संस्करण निर्देशिका।
  5. बिल्ड और स्थापित जीसीसी

कुछ इस तरह:

cd ~/software 
tar xjf $DOWNLOAD/gcc/gcc-core-${GCCVER}.tar.bz2 || failure "unpack gcc failed" 
tar xjf $DOWNLOAD/gcc/gcc-g++-${GCCVER}.tar.bz2 || failure "unpack g++ failed" 

cd gcc-${GCCVER} 

tar xjf $DOWNLOAD/gmp-5.0.2.tar.bz2 || failure "unpack gmp failed" 
#tar xjf $DOWNLOAD/gmp-4.3.2.tar.bz2 || failure "unpack gmp failed" 
ln -s gmp-* gmp 
tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" 
#tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" 
ln -s mpfr-* mpfr 
tar xzf $DOWNLOAD/mpc-0.9.tar.gz || failure "unpack mpc failed" 
ln -s mpc-* mpc 

cd .. 
mkdir gcc-build 
cd gcc-build 
../gcc-${GCCVER}/configure --prefix=/opt/tools || failure "configure failed" 
make || failure "make failed" 
make install || failure "install failed" 
+0

दुर्भाग्यवश यह एकमात्र विकल्प छोड़ दिया गया प्रतीत होता है। – 0xC0000022L

0

मुझे विश्वास है कि आपको शायद उस मामले में एक जीसीसी क्रॉस-कंपाइलर बनाना चाहिए, और आपको जीएलआईबीसी संकलित करना चाहिए जो पुराने 2.4 कर्नेल पर निर्भरता को संभालेगा।

हालांकि, क्या आप बस अपना कोड संकलित करने का प्रयास करते हैं, और बस इसे पुराने 2.4-कर्नेल संगत ग्लिब लाइब्रेरी से लिंक करते हैं? मुझे लगता है कि काम करना चाहिए।

और क्या आपने पुरानी प्रणाली पर अपनी बाइनरी चलाने के लिए हालिया प्रणाली पर सरल तरीका प्राप्त किया है? अपेक्षित काम नहीं कर रहा है?

सम्मान।

+0

निर्मित बाइनरी, जब शुरू हुई, तो एक त्रुटि फेंक देगी कि कर्नेल बहुत पुराना है। या बल्कि लोडर ऐसा कर रहा होगा। – 0xC0000022L

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