¿Cómo compilo mi aplicación para la arquitectura armhf de Ubuntu 12.04 en un host Ubuntu 12.04 i386?

16

Tengo una gran aplicación que he escrito. Puedo compilar con éxito la aplicación en los siguientes escenarios:

  • en una compilación nativa para el host i386 con Ubuntu 12.04
  • de forma nativa en un PandaBoard con Ubuntu 12.04 (esto lleva mucho tiempo)
  • usando Qemu y un chroot en la PC host para el objetivo armhf PandaBoard (esto lleva mucho tiempo)

Me gustaría compilar de forma cruzada la aplicación en el host i386 para que se ejecute en un objetivo como PandaBoard para completar las compilaciones de manera oportuna. Hasta ahora, los intentos realizados utilizando la cadena de herramientas arm-linux-gnueabihf en los repositorios han producido archivos binarios que no se ejecutan correctamente. En esta etapa, no tengo planes de empaquetar el software.

¿Cuál es la forma recomendada para lograr una compilación cruzada exitosa?

Jonathan Cave
fuente
La compilación cruzada con la cadena de herramientas del compilador cruzado debería funcionar, para eso sirve. ¿De qué manera los binarios no se ejecutan correctamente?
Gilles 'SO- deja de ser malvado'
Mis binarios terminan casi de inmediato. strace parece indicar que libc.so.6 no está donde se espera que esté.
Jonathan Cave
Eso debería ser reparable mediante una opción de enlace (no sé cuál de manera improvisada). ¿El sistema de destino ejecuta Ubuntu?
Gilles 'SO- deja de ser malvado'
Sí, el objetivo también está ejecutando Ubuntu 12.04. Pensé que tal vez necesitaba usar la opción --sysroot para el compilador y el enlazador, pero esto está deshabilitado en la cadena de herramientas de Ubuntu.
Jonathan Cave
La cadena de herramientas simplemente funciona para mí, el 12.04. Lo acabo de probar en amd64 y ejecuté con éxito el binario que produjo en un servidor armhf. Pero no tengo una máquina de compilación i386 a mano. Si todavía tiene problemas, necesitará dar más detalles. ¿Qué dice ldd? ¿Qué viste de la escena que te llevó a tu conclusión? Vea si puede reducir su problema a un simple caso de prueba que claramente debería funcionar, y presente los pasos que está tomando en detalle.
Robie Basak

Respuestas:

6

https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/UsingMultiArch

https://wiki.ubuntu.com/MultiarchCross

Ubuntu tiene una cadena de herramientas cruzadas, apt-get install gcc-arm-linux-gnueabihfpero el trabajo en la cadena de herramientas de próxima generación se trata aquí: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

Hay una serie de soluciones que son necesarias en este momento. Por ejemplo, si usa enlaces indirectos (cubiertos en la página wiki de linaro). También debe evitar ejecutar binarios extranjeros justo después de compilarlos.

Además, es realmente más maduro con autotools.

Obtuve mi paquete para la compilación cruzada bastante rápido.

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf
usuario72421
fuente
3
Explique qué hacen estos pasos y cuál es el modificador -aarmhf. No son familiares para muchos usuarios, lo que les obliga a buscar otra capa más profunda para obtener una respuesta utilizable. Gracias.
garyp