Compilació creuada de Qt6.8.0 per Raspberry Pi 3/4/5 amb docker

De things.cat
La revisió el 12:15, 21 gen 2025 per Jordi Binefa (discussió | contribucions) (En marxa)
Salta a: navegació, cerca

En marxa

  • Aneu al directori a on hi ha l'arxiu Dockerfile i deseu el codi a compilar dins de la carpeta project (assegureu-vos de no copiar CMakeLists.txt.user ni la carpeta build).
  • Identifiqueu el nom de l'arxiu executable. Dins l'arxiu CMakeLists.txt hi ha qt_add_executable amb el nom de l'arxiu executable (nom_arxiu_executable):
qt_add_executable(nom_arxiu_executable
   main.cpp
)
  • Feu una imatge de docker d'un Debian 12, anomenada qtcrossbuild, capaç de fer la compilació creuada per a Raspberry Pi:
docker build -t qtcrossbuild .

El primer cop a fer la imatge pot trigar al voltant de 4 hores. Un cop feta, el segon cop que es fa servir, habitualment canviant el contingut de la carpeta build, trigarà al voltant d'un minut, depenent de la complexitat del codi a compilar. Quan hi hagi actualitzacions del kernel al repositoris de Debian tornarà a trigar al voltant de 4 hores a fer-se la imatge.

  • Feu un contenidor temporal de la imatge qtcrossbuild per a poder copiar l'executable generat per a Raspberry Pi:
docker create --name contenidor_temporal qtcrossbuild
  • Copieu al vostre directori (si no ho heu canviat, seguiu al directori a on hi ha l'arxiu Dockerfile) l'executable generat per a Raspberry Pi que és a dins del contenidor:
docker cp contenidor_temporal:/build/project/nom_arxiu_executable ./nom_arxiu_executable
  • Copieu l'arxiu executable generat a la Raspberry Pi (canvieu pi pel vostre usuari i 192.168.1.XX per la IP de la vostra Raspberry Pi):
scp nom_arxiu_executable pi@192.168.1.XX:/home/pi/

o (canvieu raspberry pel hostname de la vostra Raspberry Pi):

scp nom_arxiu_executable pi@raspberry.local:/home/pi/
  • El primer cop que feu la compilació creuada també haureu de copiar a la Raspberry Pi les biblioteques necessàries per a que funcioni l'executable que heu compilat:
docker cp contenidor_temporal:/build/qt-pi-binaries.tar.gz ./qt-pi-binaries.tar.gz
scp qt-pi-binaries.tar.gz pi@192.168.1.XX:/home/pi/
ssh pi@192.168.1.XX
pi@raspberrypi:~ sudo mkdir /usr/local/qt6
pi@raspberrypi:~ sudo tar -xvf qt-pi-binaries.tar.gz -C /usr/local/qt6
pi@raspberrypi:~ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt6/lib/
  • Poseu en marxa l'executable generat a la Raspberry:

pi@raspberrypi:~ ./nom_arxiu_executable

  • Un cop heu fet totes les passes i tan sols esteu modificant el codi font de l'executable, haureu de repetir aquest procés:

Font

Cross compilation of Qt6.8.0 For Raspberry pi 3/4/5 with Docker(Base and QML packages) and Remote Debugging with Vscode