Como los pasos para configurar las librerias QT se convierten en largos a la hora de instalar las librerías (estoy esperando que acaben en este preciso momento), me vais a permitir que ponga aquí los pasos que he seguido hasta ahora para intentar hacer la compilación cruzada entre QT creator instalado en Ubuntu y la SBC Raspberry PI para aprovechar el tiempo muerto entre compilación y compilación.
Primero de todo, hay que abrir el "Centro de software de Ubuntu" y buscar "QT Creator" e instalarlo.
Una vez instalado tenemos que configurar e instalar las librerías de "Qt libraries 4.8.5 for embedded Linux" y el compilador Linaro tanto en el PC como en la RPi:
Instalando librerias en el PC:En mi caso voy a descargar e instalar tanto compilador como librerías en la carpeta /opt/ de Ubuntu. Así lo tendré todo localizado en la misma carpeta para mas tarde instalar las librerias y compilador en el mismo directorio pero en la Rpi
- El primer paso sería abrir el terminal y nos vamos a la carpeta /opt
cd /opt - Luego descargamos el compilador en esta carpeta, para ello ejecutamos lo siguiente:
wget http://swap.tsmt.eu/gcc-4.7-linaro-rpi-gnueabihf.tbz- Descomprimimos el compilador:
tar xvf gcc-4.7-linaro-rpi-gnueabihf.tbz - Ahora ya tenemos el compilador en la ruta /opt/gcc-4.7-linaro-rpi-gnueabihf
- Volvemos a la carpeta /opt y descargamos las librerías de QT Embedded:
wget http://download.qt-project.org/official_releases/qt/4.8/4.8.5/qt-everywhere-opensource-src-4.8.5.tar.gz- Descomprimimos la librerías:
tar xvf qt-everywhere-opensource-src-4.8.5.tar.gz- Ahora tenemos en el directorio /opt una carpeta con el compilador y otra con las librerías de QT. En mi caso he creado otro directorio dentro de /opt donde instalaré las librerías de QT. Yo he llamado al directorio QtEmbedded, y para crearlo hay que hacer lo siguiente dentro del directorio /opt
mkdir QtEmbedded- Llegado este punto vamos a comenzar a configurar e instalar las librerías de QT, Primero vamos a crear nuestro qmake.conf con la configuración que necesitamos para la RPi, para ello vamos al directorio mkspecs/qws de las librerías:
cd qt-everywhere-opensource-src-4.8.5/mkspecs/qws/- Creamos una carpeta que vamos a llamar linux-rpi-g++:
mkdir linux-rpi-g++- Vamos a coger como patrón los archivos de la carpeta linux-armv6-g++, así que copiamos el contenido de esta carpeta en la que hemos creado para la RPi
cp linux-armv6-g++/* linux-rpi-g++- Ahora entramos en la carpeta que hemos creado para la RPi
cd linux-rpi-g++- y editamos el archivo qmake.conf
gedit qmake.conf- Modificamos el archivo para que apunte al directorio donde tenemos nuestro compilador, quedará algo como lo siguiente:
#
# qmake configuration for building for ARMv6 devices with arm-linux-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_CFLAGS += -march=armv6
QMAKE_CXXFLAGS += -march=armv6
# modifications to linux.conf
QMAKE_AR = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-objcopy
QMAKE_STRIP = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-strip
load(qt_config)- Guardamos y salimos.
- Volvemos al directorio principal de las librerías para lanzar el ./config, Ejecutamos "cd .." hasta estar en el directorio /opt/qt-everywhere-opensource-src-4.8.5/
- En mi caso la configuración que he usado para lanzar el ./config es el siguiente:
./configure -embedded arm -xplatform qws/linux-rpi-g++ -nomake tools -nomake examples
-nomake demos -prefix /opt/QtEmbedded -debug -little-endian -no-qt3support -qt-sql-sqlite -host-little-endian
-webkit -nomake tests -opensource -no-pch- Algunos datos:
-embedded arm: Con esta linea decimos que queremos lo configure para usarlas en un sistema ARM, en nuestro caso la RPi
-xplatform qws/linux-rpi-g++: Esta linea indica donde esta el archivo qmake.conf que queremos que use para configurar el qmake
-prefix /opt/QtEmbedded: Indica donde instalará las librerías QT. Esta carpeta es la que hemos creado inicialmente.- Ejecutamos y cuando finalice hacemos un "make"
- Cuando finalice el make ejecutamos un "make install". Es importante que el make no nos de errores, si no no se instalarán correctamente las librerias
Si todo ha ido bien ya podemos ir al QT Creator para configurarlo.
- Abrimos QT Creator y vamos a Tools-->Options y dentro de Options vamos a la pestaña "Devices", aquí vamos a configurar nuestro dispositivo, en nuestro caso la RPi. Por tanto añadimos uno nuevo y seleccionamos "Generic Linux Device"

- Aceptamos y configuramos el nombre, la IP de nuestro dispositivo, el nombre de usuario (por defecto "pi") y el password (por defecto "raspberry")

- Nos quedará algo así:

- Aplicamos los cambios y vamos a la pestaña Build&Run.
-Dentro de esta pestaña nos vamos a la que pone Compilers y añadimos uno nuevo, en mi caso le he llamado GCC ARM y le indicamos donde esta nuestro compilador (/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++)
Quedará algo así:
- Ahora vamos a pestaña QT Versions y creamos uno nuevo. En mi caso le he llamado "Qt 4.8.5 (arm)"
- Indicamos donde esta el qmake que hemos creado. En nuestro caso habíamos definido la carpeta QtEmbedded que es donde se han instalado las librerías de QT y el qmake
(/opt/QtEmbedded/bin/qmake)
Quedará algo así:

- Si la instalación de las librerías ha ido bien y la configuración del QT Version es correcta nos indicará que nuestra versión de QT es "Qt version 4.8.5 for Embedded Linux"
- Como punto final configuramos el KIT, para ello vamos a la pestaña "Kits" y creamos un Kit nuevo. En mi caso le he llamado RPI y configuramos las opciones como en la imagen:

******* Hasta aquí toda la configuración del PC, en este caso en Ubuntu ****************
Instalando librerias en la RPi:- Igual que hemos hecho en el PC, nos vamos a la carpeta /opt para bajar e instalar el compilador y las librerías.
- Primer paso, vamos a la carpeta /opt :
cd /opt- Dentro de esta carpeta volvemos a repetir los pasos que hemos realizado en el PC. Primero descargamos el compilador
wget http://swap.tsmt.eu/gcc-4.7-linaro-rpi-gnueabihf.tbz- Descomprimimos el compilador:
tar xvf gcc-4.7-linaro-rpi-gnueabihf.tbz - Ahora ya tenemos el compilador en la ruta /opt/gcc-4.7-linaro-rpi-gnueabihf
- Volvemos a la carpeta /opt y descargamos las librerías de QT Embedded:
wget http://download.qt-project.org/official_releases/qt/4.8/4.8.5/qt-everywhere-opensource-src-4.8.5.tar.gz- Descomprimimos la librerías:
tar xvf qt-everywhere-opensource-src-4.8.5.tar.gz- Ahora tenemos en el directorio /opt una carpeta con el compilador y otra con las librerías de QT. En mi caso he creado otro directorio dentro de /opt donde instalaré las librerías de QT. Yo he llamado al directorio QtEmbedded, y para crearlo hay que hacer lo siguiente dentro del directorio /opt
mkdir QtEmbedded- Llegado este punto vamos a comenzar a configurar e instalar las librerías de QT, Primero vamos a crear nuestro qmake.conf con la configuración que necesitamos para la RPi, para ello vamos al directorio mkspecs/qws de las librerías:
cd qt-everywhere-opensource-src-4.8.5/mkspecs/qws/- Creamos una carpeta que vamos a llamar linux-rpi-g++:
mkdir linux-rpi-g++- Vamos a coger como patrón los archivos de la carpeta linux-armv6-g++, así que copiamos el contenido de esta carpeta en la que hemos creado para la RPi
cp linux-armv6-g++/* linux-rpi-g++- Ahora entramos en la carpeta que hemos creado para la RPi
cd linux-rpi-g++- y editamos el archivo qmake.conf
gedit qmake.conf- Modificamos el archivo para que apunte al directorio donde tenemos nuestro compilador, quedará algo como lo siguiente:
#
# qmake configuration for building for ARMv6 devices with arm-linux-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_CFLAGS += -march=armv6
QMAKE_CXXFLAGS += -march=armv6
# modifications to linux.conf
QMAKE_AR = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-objcopy
QMAKE_STRIP = /opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-strip
load(qt_config)- Guardamos y salimos.
- Volvemos al directorio principal de las librerías para lanzar el ./config, Ejecutamos "cd .." hasta estar en el directorio /opt/qt-everywhere-opensource-src-4.8.5/
- En mi caso la configuración que he usado para lanzar el ./config es el siguiente:
./configure -embedded arm -xplatform qws/linux-rpi-g++ -nomake tools -nomake examples
-nomake demos -prefix /opt/QtEmbedded -debug -little-endian -no-qt3support -qt-sql-sqlite -host-little-endian
-webkit -nomake tests -opensource -no-pch- Algunos datos:
-embedded arm: Con esta linea decimos que queremos lo configure para usarlas en un sistema ARM, en nuestro caso la RPi
-xplatform qws/linux-rpi-g++: Esta linea indica donde esta el archivo qmake.conf que queremos que use para configurar el qmake
-prefix /opt/QtEmbedded: Indica donde instalará las librerías QT. Esta carpeta es la que hemos creado inicialmente.- Ejecutamos y cuando finalice hacemos un "make"
- Cuando finalice el make ejecutamos un "make install". Es importante que el make no nos de errores, si no no se instalarán correctamente las librerías
******** HASTA AQUÏ LA CONFIGURACION ********
Si todo ha ido bien, ya podemos crear la aplicación en QT en el PC y pasarla a la RPi para ejecutarla. El problema que tengo ahora mismo es que la parte del ./config no me funciona correctamente y me da errores. Creo que este es el motivo principal por el que creo que no funcionan los programas que hago en QT.
Como podéis ver, en Linux esta configuración lleva su tiempo y son procesos un poco largos. Entre prueba y prueba pueden pasar varías horas, de hecho llevo todo el día (desde las 8 de la mañana) y solo he podido hacer 3 pruebas. Ahora mismo estoy haciendo la ultima (ya son las 00:32 de la noche).
Tengo que decir (muchos ya lo sabéis o lo habéis notado) que soy principiante tanto en QT como en Ubuntu, por lo que puede que una persona que los domine lo tenga todo configurado en unas horas, pero a mi a día de hoy se me esta haciendo un poco pesado todo este proceso.
Bueno, sigo luchando, no me doy por vencido. Cualquier ayuda será bien venida.
(La semana que viene puede que tenga que pararlo un tiempo por necesidad de usar Windows para otro proyecto, pero intentaré llegar a la solución final en la medida que me sea posible)