2011-03-28 291 views
7

我正在嘗試交叉編譯ARM體系結構的Perl解釋器(FriendlyARM Micro2440)。我正在使用製造商提供的ARM-Linux GCC 4.4.3交叉編譯器。該主板運行Linux 2.6。交叉編譯Perl的ARM

我能夠成功交叉編譯一個基本的「Hello World」應用程序,並且它運行在目標機器上。

我已經下載了perl v5.12.3源碼。我能夠爲Ubuntu正常編譯perl。我現在正在嘗試爲ARM板進行交叉編譯。我正在使用源代碼下載中的perl-5.12.3/Cross文件夾。

make patch成功了,但是當我運行make perl它失敗,此

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一部分。雖然我不確定。我感到困惑的是,交叉編譯環境會嘗試運行測試,因爲它針對的是與其構建的系統不同的系統。

我完全失去了從哪裏去這裏。我所交談的人在交叉編譯程序方面沒有太多經驗。

更新
我決定刪除perl源文件夾並重新提取它,認爲以前編譯的Ubuntu主機的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項目。他們爲創建嵌入式Linux發行版提供了構建框架。 http://wiki.openembedded.net/index.php/Main_Page – daotoad 2011-03-28 23:41:23

+1

makefile顯然是試圖在你的(英特爾?)構建機器上運行你的ARM二進制文件。 (我猜這個幻數與任何已知的可執行文件類型都不匹配,所以shell試圖將它作爲shell腳本運行並給出奇怪的錯誤)。你的交叉編譯設置一定有問題。 – LHMathies 2011-03-29 13:17:15

回答

6

顯然,交叉編譯perl的方式並不是在Cross目錄下執行。我需要將標誌傳遞給Configure來進行設置。我還需要使用SSH服務器設置ARM計算機(我使用的是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

如果需要安裝另一臺主機/電腦,我們還可以談談交叉編譯嗎? – 2014-07-13 00:18:39

+1

這是因爲Perl開發人員使用perl來編譯perl解釋器是個好主意。這個引導工作在gcc上工作得很好(從來沒有任何交叉編譯的問題)。而且我認爲所有在另一臺電腦上運行的都是測試,但我不記得了。 – treed 2014-07-16 22:34:45

1

以最簡單的方式爲ARM是使用perl-cross交叉編譯的Perl。

Alex Suykov爲perl開發了一套補丁程序,該補丁程序圍繞要求提供目標機器的需求而工作。部分解決方案是避免進行測試,因爲主機無論如何都無法運行交叉編譯的代碼。

我用arm-unknown-linux-uclibcgnueabi作爲我的目標(以匹配我的buildroot工具鏈),但是否則perl 5.18.0的指示工作得很好。

Alex於2014年4月23日更新了github存儲庫,因此該項目仍然相對活躍。

+0

鏈接不起作用了。也許它搬到了這裏? https://github.com/arsv/perl-cross – treed 2014-07-16 22:37:32

+0

謝謝。我更新了鏈接。 – 2014-07-17 19:39:44