Perl для кросс-компиляции для ARM - PullRequest
9 голосов
/ 29 марта 2011

Я пытаюсь выполнить кросс-компиляцию интерпретатора perl для архитектуры ARM ( FriendlyARM Micro2440 ). Я использую кросс-компилятор ARM-Linux GCC 4.4.3 , предоставленный производителем. Плата работает под управлением Linux 2.6.

Мне удалось успешно скомпилировать базовое приложение "Hello World", и оно запустилось на целевой машине.

Я скачал источник perl v5.12.3. Я был в состоянии сделать обычную компиляцию Perl для Ubuntu. Я сейчас пытаюсь сделать кросс-компиляцию для платы 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 часть. Хотя я не уверен. Меня смущает, что среда кросс-компиляции будет пытаться запускать тесты, поскольку она нацелена на систему, отличную от той, на которой она построена.

Я совершенно заблудился, куда идти дальше. Люди, с которыми я говорил, не имели большого опыта в кросс-компиляции программ.

UPDATE
Я решил удалить исходную папку perl и заново распаковать ее, думая, что предыдущая компиляция perl для хост-машины Ubuntu могла мешать текущей кросс-компиляции. Теперь я получаю другую, но похожую ошибку.

`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

Ответы [ 2 ]

6 голосов
/ 13 апреля 2011

Видимо, способ кросс-компиляции perl - это не делать это в каталоге Cross. Мне нужно было передать флаги в Configure, чтобы настроить его. Мне также нужно было настроить компьютер ARM с SSH-сервером (я использовал 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 
3 голосов
/ 27 августа 2013

Самый простой способ кросс-компиляции perl для arm - это использовать perl-cross .

Алекс Суйков разработал набор патчей для Perl, который обходит требование доступности целевой машины. Часть решения - избегать make test, поскольку хост все равно не может запускать кросс-скомпилированный код.

Я использовал arm-unknown-linux-uclibcgnueabi в качестве моей цели (в соответствии с моей цепочкой инструментов buildroot), но в остальном указания для perl 5.18.0 работали просто отлично.

Алекс последний раз обновлял репозиторий github 23 апреля 2014 года, поэтому этот проект все еще относительно активен.

...