मैं क्रॉस-संकलन के लिए जीसीसी 4.7 टूलचैन का निर्माण कैसे करूं?


82

मैंने स्टैक ओवरफ्लो पर पहले से ही यह सवाल पूछा था , लेकिन मैं यह जानना चाहूंगा कि क्या कोई एआरएम क्रॉस-संकलन (एक x86 / x86-64 लिनक्स होस्ट के लिए) के लिए जीसीसी 4.7 टूलचैन बनाने में कामयाब रहा। स्रोत से जीसीसी के निर्माण के कई निर्देश हैं और प्री-4.7 जीसीसी संस्करणों के लिए कई उपलब्ध क्रॉस-कंपाइलर हैं, बस नवीनतम नहीं है।

रास्प पाई पर संकलन स्वयं ठीक काम करता है, लेकिन व्यावहारिक उद्देश्यों के लिए यह थोड़ा धीमा है।

मैं संकलन प्राप्त करने के लिए उत्सुक हूं और मैं नवीनतम और सर्वोत्तम साधनों का उपयोग करना चाहूंगा।


यह उन पंक्तियों के साथ लगता है जो मुझे भी करने की आवश्यकता है। हम एक आर्क 5 लिनक्स चलाने वाले ARM5 के लिए विकसित कर रहे हैं। विकास उबंटू लिनक्स 10.04 एलटीएस पर है (आज, शायद हम उस कल को अपग्रेड करते हैं, मुझे अभी तक पता नहीं है)। वर्तमान में हम जीसीसी 4.4 चला रहे हैं, लेकिन मुझे जिन चीजों की आवश्यकता है, वे उपयोगी होंगे यदि सीसीसी 11 भाषा सुविधाओं के लिए जीसीसी 4.8 (न्यूनतम) नहीं तो जीसीसी 4.8 (न्यूनतम) की आवश्यकता हो सकती है। ऐसा लगता है कि एआरएम (5 या कुछ और) के लिए उपलब्ध सभी टूल चेन असहाय आउट-डेटेड हैं। क्या स्रोत से क्रॉस कंपाइलर टूल चेन का निर्माण करना संभव है और हमें जीसीसी का समर्थन करना चाहिए?
mwpowellhtx

मुझे दूसरे चरण में थोड़ी समस्या है। वास्तव में, मैंने ./configure किया और कमांड बनाया। सब कुछ ठीक काम करता है। लेकिन जब मैंने "इनस्टॉल" किया, तो मुझे एक त्रुटि संदेश मिला: इंस्टाल करें: लापता फाइल ऑपरेंड

इसे भी देखें: raspberrypi.stackexchange.com/q/14587/5538 मैंने उसे एक डूप के रूप में बंद कर दिया, लेकिन मैंने इसे यहां लिंक करने के लायक समझा क्योंकि स्वीकृत उत्तर काफी विस्तार में जाता है यहां शामिल नहीं है।
गोल्डीलॉक्स

जवाबों:


60

मैंने इन निर्देशों को पाया कि आपके रास्पबेरी पाई के लिए एक क्रॉस कंपाइलर कैसे बनाया जाए । यह एक crosstool-ngटूल का उपयोग करके एक महान चलना है जो क्रॉस-कंपाइलर के निर्माण को सरल बनाता है ए लॉट (यह एक अच्छा शाप आधारित इंटरफ़ेस है) और यह जीसीसी 4.7 का समर्थन करता है।

मैंने इन चरणों का पालन किया है और 4.7 क्रॉस-कंपाइलर के सफल निर्माण के साथ समाप्त हुआ है।

आवश्यक शर्तें: निम्न पैकेज की आवश्यकता है: जंगली भैंसों , फ्लेक्स , gperf , घूर रहा , libtool , automake , जी ++ , सुनिश्चित इन आगे बढ़ने से पहले स्थापित कर रहे हैं।

  1. पहले यहाँcrosstool-ng से डाउनलोड करें (मैंने संस्करण १.१५.२ का उपयोग किया है)।
  2. वितरण को अनपैक करें और ./configure/ make/ करेंinstall
  3. cdइसमें और इसमें बनाने के लिए फ़ाइल-सिस्टम में कहीं नई निर्देशिका बनाएँ ।
  4. भागो ct-ng menuconfig। आपको अपने बिल्ड को कॉन्फ़िगर करने के लिए मेनू का एक अच्छा सेट प्रस्तुत किया जाएगा।
  5. पथ और मिस विकल्प में जाएं EXPERIMENTAL के रूप में चिह्नित सुविधाओं को सक्षम करने का प्रयास करें
  6. एक उपयुक्त उपसर्ग निर्देशिका चुनें । यह वह निर्देशिका है जो आपके कंपाइलर और पुस्तकालयों में स्थापित हो जाएगी (कुछ भी बुनियादी रूप से ठीक है, बस यह सुनिश्चित करें कि निर्देशिका खाली है)।

    • नोट: यह भी महत्वपूर्ण है कि आपके पास चुने हुए फ़ोल्डर तक पहुंच है
  7. पर जाएं लक्ष्य विकल्प मेनू।

    • लक्ष्य वास्तुकला: हाथ
    • एंडियननेस: थोड़ा एंडियन
    • साक्षी: 32-बिट
  8. आप फ़्लोटिंग पॉइंट पैरामीटर को सॉफ्टफ़ेप पर सेट करना चाहते हैं ( इसे अधिक जानकारी के लिए देखें ), लेकिन रास्पबियन के लिए हार्डफैप अधिक उपयुक्त है।

  9. ऑपरेटिंग सिस्टम मेनू पर जाएं और लक्ष्य ओएस को लिनक्स में बदलें ।
  10. सी कंपाइलर मेनू पर जाएं और gcc संस्करण 4.7.0 चुनें (लेख में लिनारो की सिफारिश की गई है, लेकिन मैं इसे वेनिला gcc के साथ काम करने में कामयाब रहा)। उन अतिरिक्त भाषाओं को भी चुना जिन्हें आप संकलित करना चाहते हैं (C ++, फोरट्रान, ...)
  11. पर जाएं सी पुस्तकालय मेनू और एक चुना है। डिफ़ॉल्ट है eglibc लेकिन यह मेरे लिए ठीक का निर्माण नहीं किया है, इसलिए मैं इस्तेमाल किया glibc (नवीनतम संस्करण)।

    • नोट: बिल्ड चरण के दौरान 13. eglibc निर्माण में विफल हो सकता है अगर तोड़फोड़ स्थापित नहीं है, क्योंकि स्रोत रिपॉजिटरी से पुनर्प्राप्त नहीं किया जा सकता है
    • नोट: eglibc नहीं रह गया है का एक हिस्सा है संस्करण 1.21.0 के रूप में विकास की कमी की वजह से। देखें तो eglibc के लिए लंबीडिफ़ॉल्ट रूप में glibc का उपयोग करें crosstool-ng
  12. अपने परिवर्तनों को सहेजते समय कॉन्फ़िगरेशन टूल से बाहर निकलें।
  13. ct-ng buildउसी निर्देशिका में चलाएं । थोड़ी देर प्रतीक्षा करें (मेरे मामले में लगभग 45 मिनट) और आपका क्रॉस कंपाइलर तैयार होना चाहिए।

बड़ा काम लगता है!


वाह, 45 मिनट एक लंबा समय है। आपका सिस्टम कितना तेज है? मैं अब इंतजार कर रहा हूं।
Jivings

ठीक है, शायद यह थोड़ा कम था, लेकिन पहले सभी आवश्यक शर्तें संकलित करना है और बाद में बंटस्टूल और जीसीसी भी libcdc और ++, इसलिए 45 मिनट मेरे लिए उचित लगता है।

क्या हम इस बात का विवरण जोड़ सकते हैं कि इनको ठीक से कैसे स्थापित किया जाए और मार्ग को अपडेट किया जाए, एक बार जरूर देखें।
एलेक्स चेम्बरलेन

2
इसके अलावा, मुझे लगता है कि हमें हार्डफोन का उपयोग करना चाहिए, क्योंकि आरपीआई इसका समर्थन करता है।
एलेक्स चेम्बरलेन

हो सकता है, लेकिन IIRC, आर्क के GCC को सॉफ्टफप के साथ कॉन्फ़िगर किया गया है। मेरे पास अब इसका परीक्षण करने का समय नहीं है, लेकिन मैंने उत्तर समुदाय को विकी बना दिया है, इसलिए इसे सुधारने के लिए स्वतंत्र महसूस करें।

19

मैं संकलन प्राप्त करने के लिए उत्सुक हूं और मैं नवीनतम और सर्वोत्तम साधनों का उपयोग करना चाहूंगा।

वास्तव में, नवीनतम और सबसे अच्छे उपकरण को अपने द्वारा निर्मित करने की आवश्यकता नहीं है। पर रास्पबेरी Pi उपकरण GitHub भंडार आप पाएंगे X86_64और x686पार संकलन सॉफ्टवेयर के लिए toolchains।

मैं x86-linux64-cross-arm-linux-hardfpटूलकिन का उपयोग करने की सलाह देता हूं , क्योंकि यह हार्ड फ्लोटिंग पॉइंट के लिए संकलित होगा, जिसके परिणामस्वरूप बहुत तेज सिस्टम होगा।

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

नोट: यदि आप किसी मौजूदा कर्नेल का उपयोग कर रहे हैं तो आपको कर्नेल से मेल खाने वाले टूलकिन का उपयोग करना होगा। हार्डएफपी एप्लिकेशन सॉफ्टएफपी कर्नेल पर काम नहीं करेंगे।


टूलकिन का उपयोग करने के लिए बस भंडार की जाँच करें:

git clone https://github.com/raspberrypi/tools.git --depth 1

--depthपैरामीटर मतलब यह होगा कि आप भंडार इतिहास के रूप में अच्छी तरह से डाउनलोड किया जा करने के लिए के लिए (हम इसे का उपयोग किया नहीं होते के बाद से) प्रतीक्षा करने के लिए नहीं है।

फिर अपने पैथ चर में बायनेरिज़ जोड़ें:

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

या पथ को बनाए रखने के लिए:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

उपकरण श्रृंखला के साथ संकलन करने के लिए अब आप CROSS_COMPILEपैरामीटर जोड़ सकते हैं । उदाहरण के लिए, जब चल रहा हो make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

या इसे आसान बनाने के लिए, आप चर को bashrcफिर से सहेज सकते हैं :

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

और अब संकलन करते समय चर का उपयोग करें:

make CROSS_COMPILE=${TARGET}

1
यह gcc-4.5.1 लगता है।

@ टिबोर क्या बुरा है?
जिविंग्स

@Jivings यह पूरी तरह से सवाल का जवाब नहीं देता है!
एलेक्स चैम्बरलेन

1
मैं नीचता का तिरस्कार करता हूं। @AlexChamberlain यह आपके अपने टूलचेन के निर्माण के समय लेने वाली क्रिया के लिए एक मूल्यवान वैकल्पिक तरीका सुझाता है।
Jivings

2
@ जीव: यह बहुत मददगार है। इस बीच यह gcc4.7.1 (मेरे पास अब तक का सबसे अच्छा) है और फ्लोटिंग पॉइंट तुरंत काम करता है। मैं क्रिस के मूल विवरण का उपयोग करके फ़्लोटिंग पॉइंट काम नहीं कर सका जो कि टिबर ने पोस्ट किया था। बहुत बहुत धन्यवाद।

4

ध्यान दें कि जब 64 बिट सिस्टम पर सेंटोस एनजी पर 6.3 सेकंड का उपयोग करके टूलचैन का निर्माण किया गया था, तो मुझे विकल्प को सांख्यिकीय रूप से लिंक करने के लिए मजबूर किया गया था libstdc ++ क्योंकि स्थिर लिंकिंग प्लेटफॉर्म (जाहिरा तौर पर) पर समर्थित नहीं था।

इसके अलावा, जबकि गिट रिपॉजिटरी से प्रीबिल्ट टूलचिन का उपयोग करना बहुत अच्छा होगा, यह श्रृंखला सेंटोस 6.3 पर काम नहीं करती है - शायद इसलिए कि यह अधिक आधुनिक प्रणाली या कुछ के लिए बनाया गया है। मैंने वास्तव में इसे नीचे चलाने की कोशिश नहीं की।



3

यदि आप अपने RPI के लिए चीजों को संकलित करने के लिए एक तेज़ होस्ट से लाभान्वित होना चाहते हैं, तो मेरा सुझाव है कि चौराहे और QEMU के माध्यम से क्रॉस वातावरण में काम करें। इस तरह बिना किसी परेशानी के क्रॉस कंपाइलर को पार कर जाता है।

बस डेबोस्ट्रैप / मल्टीस्ट्रेप का उपयोग करके एक डेबियन क्रॉस-वातावरण सेट करें

(अध्याय QEMU / डीबूटस्ट्रैप दृष्टिकोण देखें) और आप कर रहे हैं।


3

मामले में आप ओएस एक्स से क्रॉस-कंपाइल करने जा रहे हैं: यहां शानदार लेख है (और मुझे जो वेब मिला है, उस पर काम करने वाला एकमात्र)।

सबसे बड़ी बात यह है कि लेखक एक पूर्ण precompiled टूलकिन प्रदान करता है , इसलिए आपको केवल dmg छवि को डाउनलोड, अनज़िप और माउंट करना होगा। और यह, आप पार संकलन करने के लिए तैयार हैं।


2

यदि आपने उबंटू 64 बिट संस्करण और रास्पबेरी पाई एसवीएन से उपकरण स्थापित किए हैं और आपको त्रुटि मिल रही है:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

बस दौडो:

sudo apt-get install ia32-libs

1

कार्लसन-मिनोट इंक नंगे-धातु और जीएनयू / लिनक्स एआरएम लक्ष्य दोनों के लिए एक प्रीबिल्ट टूलचिन प्रदान करता है। यह टूलचैन OS X पर निर्माण के लिए फिक्स और अडॉप्शन के साथ मेंटर ग्राफिक्स सॉरीरी लाइट टूलचैन पर आधारित है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.