2011-03-28 17 views
7

के लिए क्रॉस कंपाइल पर्ल मैं एआरएम आर्किटेक्चर (FriendlyARM Micro2440) के लिए पर्ल दुभाषिया संकलित करने का प्रयास कर रहा हूं। मैं निर्माता द्वारा प्रदत्त ARM-Linux GCC 4.4.3 क्रॉस-कंपाइलर का उपयोग कर रहा हूं। बोर्ड लिनक्स 2.6 चला रहा है।एआरएम

मैं एक मूल "हैलो वर्ल्ड" एप्लिकेशन को सफलतापूर्वक संकलित करने में सक्षम था, और यह लक्ष्य मशीन पर चला गया।

मैंने perl v5.12.3 स्रोत डाउनलोड किया है। मैं उबंटू के लिए पर्ल का सामान्य संकलन करने में सक्षम था। अब मैं एआरएम बोर्ड के लिए एक क्रॉस-संकलन करने का प्रयास कर रहा हूं। मैं स्रोत डाउनलोड में perl-5.12.3/क्रॉस फ़ोल्डर से बाहर काम कर रहा हूं।

make patch सफल रहा है, लेकिन यह इस

LD_LIBRARY_PATH=/home/reed022/.local/share/Trash/files/perl-5.2.12.3 arm-linux-gcc -o miniperl \ 
     gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o \ 
     miniperlmain.o opmini.o perlmini.o -lnsl -ldl -lm -lcrypt -lutil -lc 
LD_LIBRARY_PATH=/home/reed022/.local/share/Trash/files/perl-5.2.12.3 ./miniperl -w -Ilib -MExporter -e '<?>' || make minitest 
./miniperl: 1: Syntax error: word unexpected (expecting ")") 

मुझे लगता है कि उत्पादन की प्रासंगिकता का ./miniperl -w -Ilib -MExporter -e '<?>' || make minitest हिस्सा है के साथ विफल हो जब मैं make perl चलाते हैं। हालांकि मुझे यकीन नहीं है। मुझे यह भ्रमित लगता है कि क्रॉस-संकलन वातावरण परीक्षण चलाने की कोशिश करेगा, क्योंकि यह एक अलग सिस्टम को लक्षित कर रहा है जिस पर इसे बनाया जा रहा है।

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

अद्यतन
मैं यह सोच कर कि उबंटू होस्ट मशीन के लिए पर्ल के पिछले संकलन वर्तमान पार संकलन के साथ खिलवाड़ हो सकता है पर्ल स्रोत फ़ोल्डर को हटाने के लिए और फिर से निकालने का निर्णय लिया। अब मुझे एक अलग लेकिन समान त्रुटि मिल रही है।

`sh cflags "optimize='-O2'" generate_uudmap.o` -fexpensive-optimizations -fomit-frame-pointer -O2 -march=armv4 -mtune=strongarm1100 generate_uudmap.c 
     CCCMD = arm-linux-gcc -DPERL_CORE -c -fexpensive-optimizations -fomit-frame-pointer -O2 -march=armv4 -mtune=strongarm1100 -O2 -Wall 
arm-linux-gcc -o generate_uudmap generate_uudmap.o -lnsl -ldl -lm -lcrypt -lutil -lc 
./generate_uudmap uudmap.h bitcount.h 
./generate_uudmap: 1: Syntax error: word unexpected (expecting ")") 
make[1]: *** [bitcount.h] Error 2 
make[1]: Leaving directory `/home/reed022/Downloads/perl-5.12.3' 
make[1]: Entering directory `/home/reed022/Downloads/perl-5.12.3' 
make[1]: *** No rule to make target `more'. Stop. 
make[1]: Leaving directory `/home/reed022/Downloads/perl-5.12.3' 
make: *** [perl] Error 2 
+0

इसे सफलतापूर्वक कभी नहीं किया, लेकिन आप OpenEmbedded प्रोजेक्ट को देखना चाहेंगे। वे एम्बेडेड लिनक्स distros बनाने के लिए एक निर्माण ढांचा प्रदान करते हैं। http://wiki.openembedded.net/index.php/Main_Page – daotoad

+1

मेकफ़ाइल स्पष्ट रूप से आपके (इंटेल?) निर्माण मशीन पर आपके एआरएम बाइनरी चलाने की कोशिश कर रहा है। (मुझे लगता है कि जादू संख्या किसी भी ज्ञात निष्पादन योग्य फ़ाइल प्रकार से मेल नहीं खाती है, इसलिए खोल इसे खोल स्क्रिप्ट के रूप में चलाने की कोशिश करता है और आपको दिखाई देने वाली अजीब त्रुटि देता है)। आपके क्रॉस संकलन सेटअप के साथ कुछ गलत होना चाहिए। – LHMathies

उत्तर

6

स्पष्ट रूप से संकलन perl को पार करने का तरीका क्रॉस निर्देशिका के तहत ऐसा नहीं करना है। मुझे इसे सेट अप करने के लिए कॉन्फ़िगर करने के लिए झंडे पास करने की आवश्यकता थी। मुझे एक एसएसएच सर्वर के साथ एआरएम कंप्यूटर स्थापित करने की भी आवश्यकता है (मैंने dropbear का उपयोग किया था)। झंडे मैं इस्तेमाल किया

sh ./Configure 
    -Dusecrosscompile 
    -Dtargethost=<IP of ARM computer> 
    -Dtargetuser=<user name> 
    -Dtargetarch=arm-linux 
    -Dcc=arm-linux-gcc 
    -Dusrinc=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include/ 
    -Dincpth=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include/ 
    -Dlibpth=/opt/FriendlyARM/toolschain/4.4.3/lib 
    -Dtargetdir=/sdcard/perl 
+0

यदि कोई अन्य होस्ट/कंप्यूटर सेट करना आवश्यक है, तो क्या हम अभी भी क्रॉस संकलन के बारे में बात कर सकते हैं? –

+1

ऐसा इसलिए है क्योंकि पर्ल डेवलपर्स को पर्ल दुभाषिया संकलित करने के लिए perl का उपयोग करने का अच्छा विचार था। इस बूटस्ट्रैपिंग ने जीसीसी के साथ ठीक काम किया (कभी भी क्रॉस-कंपाइलिंग में कोई समस्या नहीं थी)।और मुझे लगता है कि जो कुछ अन्य कंप्यूटर पर चल रहा है वह परीक्षण है, लेकिन अब मुझे याद नहीं है। – treed

1

लिए सबसे आसान तरीका पार संकलन पर्ल हाथ perl-cross उपयोग करने के लिए है के लिए कर रहे हैं।

एलेक्स सुकोव ने पर्ल के लिए पैच का एक सेट विकसित किया जो लक्ष्य मशीन उपलब्ध कराने के लिए आवश्यकता के आसपास काम करता है। समाधान का एक हिस्सा परीक्षण करने से परहेज कर रहा है क्योंकि मेजबान क्रॉस-संकलित कोड को किसी भी तरह से चला नहीं सकता है।

मैंने अपने लक्ष्य (मेरे buildroot टूलचेन से मेल खाने के लिए) के रूप में हाथ-अज्ञात-लिनक्स-uclibcgnueabi का उपयोग किया, लेकिन अन्यथा 5.18.0 perl के लिए निर्देश ठीक काम किया।

एलेक्स ने आखिरी बार 23 अप्रैल, 2014 को जिथब रिपोजिटरी अपडेट की, इसलिए यह परियोजना अभी भी अपेक्षाकृत सक्रिय है।

+0

लिंक अब और काम नहीं करता है। शायद यह यहाँ चले गए? https://github.com/arsv/perl-cross – treed

+0

धन्यवाद। मैंने लिंक अपडेट किया। –

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