2011-03-28 19 views
7

Estoy intentando cruzar compilar el intérprete perl para una arquitectura ARM (FriendlyARM Micro2440). Estoy usando el compilador cruzado ARM-Linux GCC 4.4.3 proporcionado por el fabricante. La placa ejecuta Linux 2.6.Cross Compile perl para ARM

Pude compilar de forma cruzada una aplicación básica de "Hello World" y se ejecutó en la máquina de destino.

He descargado la fuente perl v5.12.3. Pude hacer una compilación normal de perl para Ubuntu. Ahora estoy intentando hacer una compilación cruzada para el tablero ARM. Estoy trabajando en la carpeta perl-5.12.3/Cross en la descarga de la fuente.

make patch tuvieron éxito, pero cuando corro make perl falla con este

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 ")") 

Creo que la parte correspondiente de la salida es la parte ./miniperl -w -Ilib -MExporter -e '<?>' || make minitest. Aunque no estoy seguro Me parece confuso que el entorno de compilación cruzada intente ejecutar pruebas, ya que está apuntando a un sistema diferente al que está siendo desarrollado.

Estoy completamente perdido como a dónde ir desde aquí. Las personas con las que he hablado no tienen mucha experiencia con los programas de compilación cruzada.

ACTUALIZACIÓN
que decidió suprimir la carpeta de origen Perl y volver a extraerlo, pensando que la compilación previa de Perl para la máquina host Ubuntu podría haber sido jugar con la corriente de compilación cruzada. Ahora recibo un error diferente pero similar.

`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

Nunca lo hizo con éxito, pero es posible que desee comprobar el proyecto OpenEmbedded. Proporcionan un marco de trabajo para crear distros Linux integrados. http://wiki.openembedded.net/index.php/Main_Page – daotoad

+1

El archivo MAKE intenta claramente ejecutar sus binarios ARM en su máquina de creación (Intel?). (Supongo que el número mágico no coincide con ningún tipo de archivo ejecutable conocido, por lo que el intérprete de comandos intenta ejecutarlo como un script de shell y da el extraño error que ves). Debe haber algo mal con su configuración de compilación cruzada. – LHMathies

Respuesta

6

Aparentemente, la forma de cruzar compilar perl no es hacerlo bajo el directorio Cross. Necesitaba pasar banderas a Configurar para configurarlo. También necesitaba configurar la computadora ARM con un servidor SSH (utilicé dropbear). Las banderas que utilicé son

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

Si es necesario configurar otro host/computadora, ¿podemos seguir hablando de compilación cruzada? –

+1

Se debe a que los desarrolladores de Perl tuvieron la excelente idea de usar Perl para compilar el intérprete de Perl. Este bootstrapping funcionó bien con gcc (nunca tuvo problemas para compilar de forma cruzada).Y creo que todo lo que se está ejecutando en la otra computadora son las pruebas, pero no recuerdo más. – treed

1

La forma más fácil de compilación cruzada Perl para el brazo es utilizar perl-cross.

Alex Suykov desarrolló un conjunto de parches para perl que funciona en torno al requisito de tener una máquina de destino disponible. Parte de la solución es evitar hacer una prueba ya que el host no puede ejecutar códigos compilados de todos modos.

Utilicé arm-unknown-linux-uclibcgnueabi como mi objetivo (para que coincida con mi buildroot toolchain), pero por lo demás las instrucciones para Perl 5.18.0 funcionaron bien.

Alex actualizó por última vez el repositorio de github el 23 de abril de 2014, por lo que este proyecto todavía está relativamente activo.

+0

El enlace ya no funciona. Tal vez se mudó a aquí? https://github.com/arsv/perl-cross – treed

+0

Gracias. Actualicé el enlace. –