2012-06-10 10 views
51

टीएल/डॉ: मैं एआरएम (gnueabi) प्लेटफॉर्म के लिए जीसीसी 4.7.0 पार संकलन toolchain (एक रास्पबेरी Pi डिवाइस पर चलने का इरादा) के निर्माण के बारे में अधिक जानकारी कहाँ से मिलेगी?जीसीसी में रास्पबेरी पीआई के लिए क्रॉस-संकलन। कहा से शुरुवात करे?

मुझे अभी एक नया रास्पबेरी पीआई मिला है और मैं इसके लिए प्रोग्रामिंग शुरू करने के लिए बहुत उत्सुक हूं। मैंने जीसीसी टूलचैन स्थापित करने में कामयाब रहा है (मैं आर्क लिनक्स सिस्टम छवि का उपयोग कर रहा हूं) और कुछ बुनियादी कार्यक्रमों को संकलित किया, सभी ठीक काम कर रहे हैं।

मैं भी बूस्ट पुस्तकालयों संकलित करने के लिए क्योंकि मैं अक्सर उन्हें अपनी परियोजनाओं में उपयोग की कोशिश की है और सब कुछ निर्देश (./bootstrap.sh + ./b2) तथ्य यह है कि संकलन दर्दनाक धीमी थी के अलावा का पालन करते हुए ठीक काम करने के लिए लग रहा था। मैंने इसे कुछ घंटों तक छोड़ा लेकिन यह मुश्किल से पहले कुछ स्रोत फ़ाइलों को पीछे छोड़ दिया। रात के लिए दौड़ने के बाद, मैंने पाया कि निर्माण की कमी राम की कमी के कारण निरस्त हो गई है।

तो, मेरा अनुमान है कि रास्प पी को बस बूस्ट जैसे आकार के कुछ संकलन के लिए कम किया गया है। तो, मेरे दिमाग में क्रॉस-संकलन आता है। हालांकि, ऑनलाइन उपलब्ध एआरएम क्रॉस संकलन के बारे में बहुत सारी जानकारी है, लेकिन मुझे यह भ्रमित लगता है। कोई भी कहां से शुरू होता है?

मेरे पास हाल ही में एक जीसीसी संस्करण (4.7.0) है जो मेरे रास्पबेरी पीआई पर उपलब्ध है, इसलिए मैं आदर्श रूप से उसी संस्करण के साथ संकलन करना चाहता हूं। एआरएम के लिए मुझे जीसीसी 4.7.0 टूलचेन कहां मिल सकता है? (मैं 86 CentOS 6.2 पर संकलन किया जाएगा)

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

मैं अनावश्यक GPU स्मृति पुनः आवंटित की जाती है और, एक यूएसबी ड्राइव पर एक 4GB स्वैप विभाजन की स्थापना की है, जबकि निर्माण फ़ाइलों को एक NFS शेयर पर हैं। बूस्ट अब बहुत तेज संकलन कर रहा है, इसलिए यह प्रबंधनीय है। मैं अभी भी जानना चाहूंगा कि मैं अपने x86 पीसी पर क्रॉस संकलन के लिए जीसीसी 4.7 टूलचेन कैसे स्थापित कर सकता हूं, क्योंकि मैं बहुत संकलन करना चाहता हूं और मैं इसे यथासंभव तेज़ी से बनाना चाहता हूं।

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

के बाद से जीसीसी 4.7.0 अपेक्षाकृत नया है, वहाँ पहले से बने पार संकलक (i386-> एआरएम) होने के लिए प्रतीत नहीं होता। मुझे शायद खुद को एक बनाना होगा, जो एक गैर-मामूली कार्य लगता है (मैंने कोशिश की और असफल रहा)। क्या किसी को हाल ही के संस्करणों में से एक के लिए उम्मीद है कि जीसीसी क्रॉस-कंपाइलर बनाने के लिए अनुसरण करने के लिए ट्यूटोरियल की जानकारी है?

मैं this great shell script (जो एक ही चाप संकलक के निर्माण के लिए महान काम किया) के साथ की कोशिश की है और मैं सफलतापूर्वक binutils और जीसीसी के आवश्यक शर्तें का निर्माण किया है, लेकिन फिर जीसीसी का निर्माण कई गूढ़ त्रुटियों के साथ असफल रहने रखा। मैं वास्तव में यहां खो गया हूं, इसलिए मैं आपकी मदद की बहुत सराहना करता हूं। रास्पबेरी Pi पर

जीसीसी के साथ

--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib 
--mandir=/usr/share/man --infodir=/usr/share/info 
--with-bugurl=https://bugs.archlinux.org/ 
--enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-shared 
--enable-threads=posix --with-system-zlib --enable-__cxa_atexit 
--disable-libunwind-exceptions --enable-clocale=gnu 
--disable-libstdcxx-pch --enable-libstdcxx-time 
--enable-gnu-unique-object --enable-linker-build-id --with-ppl 
--enable-cloog-backend=isl --enable-lto --enable-gold 
--enable-ld=default --enable-plugin --with-plugin-ld=ld.gold 
--with-linker-hash-style=gnu --disable-multilib --disable-libssp 
--disable-build-with-cxx --disable-build-poststage1-with-cxx 
--enable-checking=release --host=arm-unknown-linux-gnueabi 
--build=arm-unknown-linux-gnueabi 

संपादित 3 कॉन्फ़िगर किया गया था:

मैं एआरएम के लिए एक 4.7 जीसीसी toolchain (! Yay) this shell script का उपयोग कर निर्माण करने में कामयाब रहे के रूप में उपयोगकर्ता dwelch ने सुझाव दिया टिप्पणियाँ। मैंने newlib और libstdc++ को एक गाइड के रूप में this article का उपयोग करके भी बनाया। टूलचेन ठीक काम करता है, लेकिन मैं अपने रास्पबेरी पीआई पर निष्पादन योग्य चलाता हूं, यह Illegal instruction के साथ विफल रहता है। इसका कारण क्या हो सकता है?

+1

ज़्राम पैकेज को आजमाएं यदि यह पहले से इंस्टॉल नहीं है। यह एक संपीड़ित रैम स्वैप बनाएगा, जो आपको लगता है उससे ज्यादा मदद करता है। (अजीब रूप से पर्याप्त।) एक निश्चित रूप से तेज़ यूएसबी डिवाइस, या तो एक यूएसडी एचडीडी या एक उच्च गुणवत्ता वाली यूएसबी स्टिक जोड़ें और उस पर स्वैप डालें। –

+3

इसके अलावा, आप इस धागे में ग्राफिक्स मेमोरी को अक्षम करने के तरीके को पढ़ सकते हैं ताकि आपको 32 मेगा रैम प्राप्त हो सके: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=5&t=4831&p=65410 –

+1

वाह, धन्यवाद । वास्तव में जीपीयू के लिए आवंटित 128 एमबी था। कोई आश्चर्य नहीं कि सबकुछ इतना सुस्त था। – Tibor

उत्तर

2

मुझे 4.7 जीसीसी नहीं मिला, केवल 4.6। जानकारी के लिए, मैं एक काफी पुराने Ubuntu मशीन (1Ghz, 768MB रैम) इस पृष्ठ पर दिशा निर्देशों का पालन पर पाई के कर्नेल संकलित: Kernel compilation

निर्माण के बारे में 90 मिनट लग गए, 6 घंटे यह यह है कि सुझाव दिया है की तुलना में पीआई ले जाएगा। कर्नल पीआई पर ठीक चलाता है। शायद आप अपने x86 लिनक्स मशीन पर अन्य परियोजनाओं को पार करने के लिए इन दिशानिर्देशों को अनुकूलित कर सकते हैं।

24

मुझे ये निर्देश How to build a cross compiler for your Raspberry Pi मिला। यह crosstool-ng उपकरण का उपयोग कर एक शानदार चलना है जो एक क्रॉस-कंपाइलर बिल्ड ए लॉट को कॉन्फ़िगर करने में आसान बनाता है (इसमें एक अच्छा शाप-आधारित इंटरफेस है) और यह जीसीसी 4.7 का समर्थन करता है।

महान काम करने लगता है!

4

http://github.com/dwelch67/raspberrypibuildgcc directory 4.7 gcc/gnu और 3.0 clang/llvm दोनों के लिए एक स्क्रिप्ट है। ओपनकोर्स पर एमपीएक्स प्रोजेक्ट पर लिपि से ली गई एक gnu, मैंने जीडीबी और libgcc, glibc, आदि काट दिया, इसे एक कंपाइलर में ले गया। यदि आप चाहते हैं कि अन्य सामान मिप्स के लिए हाथ काट लें और पेस्ट करें।

0

जैसा कि आपने देखा है, रास्पबेरी पीआई पर निर्माण धीमा है, लेकिन भरोसेमंद (क्योंकि यह क्रॉस-कंपाइलिंग नहीं है), बशर्ते आप स्मृति से बाहर न हों। शायद बड़े निर्माण को संभव बनाने के लिए स्मृति और स्वैप सेटिंग्स को ट्विक करना संभव है (यदि तेज़ नहीं है)। मैं मंचों पर जानता हूं, लोग एसडी पर रूट विभाजन, यूएसबी ड्राइव पर उपयोगकर्ता विभाजन डालने के बारे में बात कर रहे हैं, और निश्चित रूप से यह तेजी से (कक्षा 6 या बेहतर) एसडी कार्ड प्राप्त करने में अंतर डाल देगा। यह संभव है, समय के साथ, संकलन प्रदर्शन में सुधार होगा क्योंकि सॉफ़्टवेयर में सुधार होता है। या, शायद रास्पबेरी पीआई 2 में एक बेहतर चिपसेट और अधिक रैम होगा। :-)

+0

सुझाव के लिए धन्यवाद लेकिन आरपीआई बनाम 1 मिनट पर 30 मिनट मेरा लैपटॉप विकास के लिए बहुत अव्यवहारिक बनाता है जहां मेरे पास बहुत पुनर्निर्माण करने के लिए बहुत कुछ है। यदि अंतर इतना कठोर नहीं था, तो मैं निश्चित रूप से डिवाइस पर निर्माण कर रहा था। – Tibor

+0

हाँ मैं एक ही नाव में हूं, आरपीआई पर लगभग 30 मिनट का निर्माण समय। मैं लिनक्स (वास्तव में मैक ओएस एक्स पर उबंटू वीएम) में विकसित होने जा रहा हूं, फिर जब मैं इसका परीक्षण करना चाहता हूं तो बस आरपीआई पर बनाता है। मुझे आशा है कि मेरे उद्देश्य के लिए पर्याप्त होगा (यह एक उचित सेटअप है) लेकिन यदि नहीं, तो मैं भी क्रॉस-कंपाइलिंग करूँगा। – mlepage

+0

मुझे नहीं पता कि मेरी पीआई अलग है या नहीं, लेकिन मेरे पास 2012 से एक है। यह 1000 मेगाहट्र्ज से अधिक है। फिर भी, यह वास्तविक कोड की मेरी सबसे बड़ी प्रोग्राम ~ 10k लाइनों को संकलित करने में सक्षम है (टिप्पणियां नहीं, आदि)। मैं सभी आउटपुट ऑब्जेक्ट्स को हटाता हूं या नहीं, इस पर निर्भर करता हूं कि मैं लगभग 30 से 3 मिनट के संकलन के समय प्राप्त करता हूं। मुझे शायद ही कभी जीसीसी सेगफॉल्ट मिल जाए। हालांकि, यह वास्तव में उस संकलन समय के साथ फ्लाई पर कोड डीबग और बदलने की परेशानी है! मैंने अपने सभी कार्यक्रमों को उबंटू के साथ अपने लैपटॉप पर डीबग किया और फिर उन्हें पीआई के लिए संकलित किया! अच्छी तरह से काम! – yash101

4

यहां एक चरण-दर-चरण मार्गदर्शिका How to build Raspberry Pi cross-compiler in Windows है। Illegal Instruction त्रुटि प्राप्त करने का कारण नवीनतम है रास्पियन हार्डफैप-सक्षम है और हार्डफैप का समर्थन करने के लिए gcc और eglibc के लिए उपयुक्त पैच की आवश्यकता है। अन्यथा जेनरेट कोड विभिन्न एबीआई का उपयोग करेगा, यानी अलग-अलग रजिस्टरों में पास फ़ंक्शन तर्क, इसलिए रनटाइम पर क्रैश।

एआरएमवी 7 (रास्पबेबी पीआई एआरएमवी 6) के लिए भी जीसीसी को गलत कॉन्फ़िगर करना Illegal Instruction त्रुटि हो सकता है। जीसीसी को कॉन्फ़िगर करते समय --with-arch=armv6 विकल्प निर्दिष्ट करना सुनिश्चित करें।

उपरोक्त मार्गदर्शिका जीसीसी 4.6.3 पर आधारित है। लेकिन मुझे लगता है कि इसे जीसीसी 4.7 के साथ भी काम करना चाहिए।

1

आपको कम से toolchain की कोशिश कर सकते: https://github.com/kallaballa/Raspberry-GCC-4.7.3

यह hardfp gnueabi उपयोग करने के साथ ARMv6 के लिए पहले से बने जीसीसी-4.7.3 toolchain है। मैं रास्पबेरियाई लक्ष्य के लिए संकलन C++ 11 को पार करने के लिए इसका उपयोग कर रहा हूं।

कृपया ध्यान दें कि यह केवल लिनक्स x86_64 होस्ट पर काम करता है।

1

dockcross project पूरी तरह से डिओडोरिज्ड टूल श्रृंखला के लिए एक महान प्रारंभिक बिंदु है, आप केवल पीआई के लिए नहीं बल्कि कुछ और के लिए भी बना सकते हैं। यहाँ आदेशों हैं:

docker run --rm dockcross/linux-armv7 > ./dockcross-linux-armv7 
chmod +x ./dockcross-linux-armv7 
./dockcross-linux-armv7 bash -c '$CC test/C/hello.c -o hello_arm' 

यह cmake रूप में अच्छी तरह का निर्माण किया है।

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