Teléfono y Whatsapp: 675 18 68 80

Compilación cruzada de QT5 para Raspberry Pi en Ubuntu

La compilación cruzada o o cross-compiling consiste, en generar binarios para una arquitectura distinta a la que estamos utilizando para compilar. Por ejemplo, generar un ejecutable para un procesador ARM desde una arquitectura IA-32 o AMD64. Para el caso de una raspberry pi nos va a permitir ahorrarnos muchas horas ya que nuestro PC es varias veces más potente que la raspberry pi.

QT5 es un framework C++ de código abierto y multiplataforma desarrollado por Digia, con multitud de documentación y con lo que podemos hacer prácticamente de todo.

En esta entrada de blog, vamos a ver cómo a partir de una imagen de raspbian (el debian de raspberry pi), y de nuestro PC vamos a ser capaces de compilar QT5 e ‘incrustarlo’ dentro de la imagen, para que una vez acabado el proceso, podamos grabar dicha imagen en una SD y trabajar con QT desde la raspberry out of the box.

prerequisistos

Hace falta tener instalados algunos paquetes previa compilación de los mismos:

sudo apt-get install build-essential libgl1-mesa-dev git ia32-libs

compilación

Para la compilación vamos a trabajar en un direcotrio opt de nuestra carpeta home y tendremos que obtener la ultima imagen de raspbian, la cual una vez descargada, nombraremos a raspbian.img:

mkdir ~/opt
cd ~/opt
wget http://downloads.raspberrypi.org/raspbian_latest -O raspbian_latest.zip
unzip raspbian_latest.zip
mv 2014-01-07-wheezy-raspbian.img raspbian.img

montamos la imagen de raspbian como un dispositivo:

sudo mkdir /mnt/rasp-pi-rootfs
sudo mount -o loop,offset=62914560 raspbian.img /mnt/rasp-pi-rootfs

nota: raspbian jessie: sudo mount -o loop,offset=67108864 raspbian.img /mnt/rasp-pi-rootfs

clonamos el código fuente de QT5 desde git:

git clone git://gitorious.org/qt/qt5.git

accedemos al directorio creado e inicializamos el repositorio:

cd qt5
./init-repository

Descargamos las librerías de Linaro para la compilación cruzada:

cd ..
wget http://swap.tsmt.eu/gcc-4.7-linaro-rpi-gnueabihf.tbz
tar xvf gcc-4.7-linaro-rpi-gnueabihf.tbz
git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
cd cross-compile-tools
sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc

compilamos QT5 con los parámetros adecuados:

cd ../qt5
./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix /usr/local/qt5pi -no-pch
make -j 4
sudo make install

y por último, desmontamos la imagen de la rpi:

sudo umount /mnt/rasp-pi-rootfs/

Después de acabar todo el proceso, nuestra imagen raspbian.img contendrá QT5 compilado dentro, sólo queda grabarlo a una tarjeta SD.

  • Jose

    Hola Álavaro,

    gracias por el tutorial. ¿sabes de alguna imagen lista para “quemar” en una SD con Qt5 compilado?

    La que aparece como Qtonpi hace tiempo que dejó de tener soporte y no funciona.

    ¿Sería posible subirla y compartirla? Es difícil encontrarlo y ahorraría mucho tiempo.

    Gracias y un saludo.