2009-11-12 24 views
20

gcc build instructions के अनुसार आप जीसीसी (साथ ही जीएमपी, एमपीसी, आदि) के निर्माण के साथ एक साथ बिनुटिल बना सकते हैं।एक साथ binutils और जीसीसी संकलन के लिए पकाने की विधि?

यहाँ कि पेज का कहना है:

If you also intend to build binutils (either to upgrade an existing installation or for use in place of the corresponding tools of your OS), unpack the binutils distribution either in the same directory or a separate one. In the latter case, add symbolic links to any components of the binutils you intend to build alongside the compiler (bfd, binutils, gas, gprof, ld, opcodes, ...) to the directory containing the GCC sources.

Likewise the GMP, MPFR and MPC libraries can be automatically built together with GCC. Unpack the GMP, MPFR and/or MPC source distributions in the directory containing the GCC sources and rename their directories to gmp, mpfr and mpc, respectively (or use symbolic links with the same name).

यह जीएमपी, एमपीसी, mpfr के लिए ठीक काम करता है, लेकिन मैं इसे binutils के सभी निर्माण करने के लिए प्राप्त करने के लिए नहीं कर पा रहे। न ही मैं यह जान सकता हूं कि इसे बिनुटिल्स से नया स्वर्ण लिंकर बनाने के लिए कैसे प्राप्त किया जाए। प्रश्न में संस्करण gcc-4.4.2 और binutils-2.20 हैं।

चरण-दर-चरण निर्देश एक महान कदम होगा (मेरे लिए, और अन्य लोगों के लिए जो इस मुद्दे में भी भाग लेते हैं)।

+0

आपको यह देखने में भी रुचि हो सकती है कि [लिनक्स से स्क्रैच] (http://www.linuxfromscratch.org/lfs/view/development/index.html) यह करता है। यह binutils, जीसीसी और glibc (एक और प्रमुख जीसीसी निर्भरता) के लिए एक 2 कदम बूटस्ट्रैप का उपयोग करता है। –

उत्तर

0

मैं हमेशा सब कुछ अलग से बनाता हूं। के बाद आप बनाया गया है और स्थापित binutils किया है, जीसीसी ठीक बनाने चाहिए जब तक कि आप प्रत्येक कॉन्फ़िगर स्क्रिप्ट ही --target और --prefix विकल्प दे:

binutils:

$ ./configure --target=XYZ --prefix=/abc/def 
$ make all install 

तो पथ (यदि आवश्यक हो) जोड़ें:

$ export PATH="$PATH:/abc/def/bin" 

और निर्माण जीसीसी:

$ ./configure --target=XYZ --prefix=/abc/def 
$ make all-gcc install-gcc 

फिर आवश्यक होने पर अपने libc और शेष gcc का निर्माण करें (शायद एक डीबगर भी!)।

+2

धन्यवाद, लेकिन यह सवाल नहीं है कि मैं पूछ रहा हूं। मुझे पता है कि उन्हें अलग से कैसे बनाया जाए। दस्तावेज़ इंगित करते हैं कि आप उन्हें एक एकल निर्माण के रूप में बना सकते हैं। यही वह है जिसे मैं ढूंढ रहा हूं। – bdbaddog

+1

परेशान क्यों? यदि आप उन्हें अलग से कर सकते हैं और वे काम करते हैं, तो उन्हें एक साथ रखने की कोशिश करने के दर्द से क्यों गुजरते हैं? –

+2

उन्होंने इस रणनीति की निष्ठा के बारे में नहीं पूछा, बस इसे कैसे करें। –

3

आप जो करना चाहते हैं उसे "संयुक्त पेड़" या "इन-पेड़ बिनुटिल्स" निर्माण कहा जाता है। आप here और there आगे बढ़ने के तरीके पर दस्तावेज़ ढूंढ सकते हैं।

+1

और: https: // gcc।gnu.org/simtest-howto.html –

21

यह अभी भी समर्थित होना चाहिए ठीक है, क्योंकि यह आमतौर पर क्रॉस-कंपाइलर्स बनाने के लिए उपयोग किया जाता है।

वास्तव में, मैं सिर्फ जीसीसी 4.6.0 के साथ इस किया है और binutils 2.21, और निम्न (जीएमपी, एमपीसी और उचित संस्करणों में mpfr के साथ) ठीक काम करने के लिए लग रहा था:

  • जाओ सब जिन सामानों को आप बनाने जा रहे हैं, उनके अभिलेखागार (gcc-4.6.0.tar.bz2, binutils-2.21.tar.bz2 आदि) एक नए डीआईआर में, उदाहरण के लिए इस निर्देशिका में src
  • संयुक्त राष्ट्र के टार उन सब को है, तो आप gcc-4.6.0/binutils-2.21/gmp-5.0.2/ साथ खत्म हो और अधिक एक दूसरे के

    tar jxvf gcc-4.6.0.tar.bz2 
    ... (unpack others here, watch file lists scroll past) 
    
  • cd gcc-4.6.0 के साथ बैठे और उनके संस्करण संख्याओं के बिना जीएमपी, एमपीसी और mpfr निर्देशिका सिमलिंक लिंक में, ई।छ:

    :

    ln -s ../gmp-5.0.2 gmp 
    
  • binutils dir जो जीसीसी निर्देशिका में मौजूद नहीं है, इसलिए कुछ भी पहले से मौजूद है जो वरीयता दी जाएगी से अब सिमलिंक सब कुछ लेकिन binutils उपकरण दिखेगा निर्माण को दिखाई

    for file in ../binutils-2.21/* ; do ln -s "${file}" ; done 
    
  • एक डीआईआर बदलें और इसे अलग-अलग स्रोतों में बनाने के लिए एक बिल्ड निर्देशिका बनाएं (यह हमेशा अनुशंसित विधि के रूप में उपयोग किया जाता है, और यह स्रोत डीआईआर के अंदर इमारत से अधिक विश्वसनीय होने लगता है):

    cd .. ; mkdir build 
    
  • आप निर्देशिका और लिंक का समूह जो कुछ इस तरह दिखता होना चाहिए इस बिंदु पर:

    binutils-2.21/ 
    build/ 
    gcc-4.6.0/ 
        gmp -> ../gmp-5.0.2 
        mpc -> ../mpc-0.9 
        mpfr -> ../mpfr-3.0.1 
        bfd -> ../binutils-2.21/bfd 
        binutils -> ../binutils-2.21/binutils 
        gas -> ../binutils-2.21/gas 
        ... (lots more symlinks for binutils here, plus existing gcc stuff) 
    gmp-5.0.2/ 
    mpc-0.9/ 
    mpfr-3.0.1/ 
    
  • कॉन्फ़िगर इस निर्देशिका, जो कुछ भी विकल्प आप की जरूरत के साथ से बहुत कॉन्फ़िगर करने के लिए पारित करने के लिए:

    ../gcc-4.6.0/configure --prefix=/foo/bar --enable-languages=c,c++,ada 
    
  • बिल्ड,, रुको स्थापित (आप शायद make -j4 उपयोग करने के लिए या तो यहाँ कुछ समानांतर में बनाता है के रूप में यह कुछ समय ले जा रहा है पाने के लिए चाहता हूँ):

    make -j4 ; make install 
    

, अगर यह पहले से ही नहीं है (और शायद lib dir अगर यह /etc/ld.so.conf में निर्दिष्ट के बाहर है, के रूप में make install चरण के दौरान पुस्तकालयों स्थापित करने के बारे में बताया गया संदेशों LD_LIBRARY_PATH करने के लिए) अपने पथ में गंतव्य जोड़ें और सब कुछ इस नए संस्करण के साथ होना चाहिए और चलना चाहिए।

यह शायद जाँच है कि आप इस स्थापित संस्करण का उपयोग कर रहे एक बार एक नया खोल खोल दिया है, साथ लायक है: संस्करण के रूप में अच्छी तरह

`which gcc` 

और

`which as` 

..as

`gcc --version` 

और

: के रूप में आप के साथ की उम्मीद है
`as --version` 

साथ ही ..as (बेशक) परीक्षण है कि स्थापित संस्करण के लिए कुछ सरल उदाहरण के साथ ठीक निष्पादनयोग्य बनाता है इससे पहले कि आप अपने कोड आधार :)

संपादित करें पर खुला छोड़: नीचे टिप्पणी कुछ शामिल संस्करणों के सेट जो एक साथ काम करने के लिए जाने जाते हैं। सभी संयोजन काम नहीं करेंगे, इसलिए आपको बताए गए विभिन्न संयोजनों के लिए कुछ परीक्षण और त्रुटि से गुजरना पड़ सकता है!

+2

स्वयं और अन्य लोगों के लिए एक नोट: जीसीसी 4.7.1 के साथ ऐसा करने के लिए वर्तमान में हाल ही में mpfr का पुराना संस्करण आवश्यक है। मैंने सफलता के साथ mpfr-2.4.2 का उपयोग किया है लेकिन कुछ भी> 3.0 मेरे लिए काम नहीं करता है। (सभी घटकों की सूची: binutils-2.22, gcc-4.7.1, gmp-5.0.5, mpc-1.0, mpfr-2.4.2) –

+2

एक और नोट: यह gcc 4.7.2 के साथ करना, binutils-2.22 और contrib के साथ gmp, mpc, mpfr के लिए/download_prerequisites; रेसिपी काम करता है, लेकिन जीसीसी -फ्लो के साथ निर्माण करने में विफल रहता है, जिसके परिणामस्वरूप: collect2: घातक त्रुटि: 'ld' नहीं मिल सकती है। इसे सुधारने के लिए, एक प्रतीकात्मक लिंक ld -> ld-new बनाएं ... prefix/bin निर्देशिका। –

+0

यदि आप 'ग्रेफाइट' अनुकूलन को सक्षम करना चाहते हैं (http://gcc.gnu.org/wiki/Graphite देखें) तो आपको आईएसएल और क्लूग पुस्तकालयों की भी आवश्यकता होगी, और उन्हें उसी तरह सिमलिंक करने के लिए अन्य पुस्तकालयों (एमपीपी, एमपीसी और इतने पर)। मैं इसे जल्द ही शामिल करने के लिए निर्देश अपडेट करूंगा। –