Tämä blogikirjoitus on päivitys - tällä hetkellä - uusimpaan versioon 6.8 Qt:stä, raspi OS Bookworm ja Ubuntu 22.04 LTS.
Edellytykset
Käytin seuraavia laitteita ja ohjelmistoja:
Raspberry Pi 4
raspi OS Bookworm, ilman suositeltua ohjelmistoa
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
Huomautukset
Jos sinulla on kannettava tietokone tai pöytätietokone, jossa on riittävästi RAM-muistia ja prosessoriytimiä, voit tehdä ristiinkäännön virtuaalikoneessa. Olen kuitenkin kokenut, että natiivikone on paljon nopeampi ja tuottaa vähemmän virheitä.
Tutustu koodiesimerkkieni tiedostopolkuihin ja ip-osoitteisiin ja säädä ne omiin tarpeisiisi.
Löydä gcc:n, ld:n ja ldd:n versiot. Saman version lähdekoodi on ladattava, jotta myöhemmin voidaan rakentaa ristiinkääntäjä.
pi@raspberrypi:~ $ gcc --version
gcc (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
pi@raspberrypi:~ $ ld --version
GNU ld (GNU Binutils for Debian) 2.40
Copyright (C) 2023 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
pi@raspberrypi:~ $ ldd --version
ldd (Debian GLIBC 2.36-9+rpt2+deb12u8) 2.36
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Liitä seuraava koodinpätkä ~/.bashrc-tiedoston loppuun ja päivitä muutokset:
cd ~
wget https://github.com/Kitware/CMake/releases/download/v3.30.5/cmake-3.30.5.tar.gz
tar -xzvf cmake-3.30.5.tar.gz
cd cmake-3.30.5
./bootstrap
make -j$(nproc)
sudo make install
# Update PATH Environment Variable
which cmake
/usr/local/bin/cmake
export PATH=/usr/local/bin/cmake:$PATH
source ~/.bashrc
cmake --version
Rakenna gcc ristiinkääntäjäksi.
Lataa tarvittava lähdekoodi. Seuraavat komennot kannattaa muokata tarpeidesi mukaan. Sillä aikaa kun teen tämän sivun, ne ovat:
gcc 12.2.0
binutils 2.40(ld-versio)
glibc 2.36(ldd-versio)
cd ~
mkdir gcc_all && cd gcc_all
wget https://ftpmirror.gnu.org/binutils/binutils-2.40.tar.bz2
wget https://ftpmirror.gnu.org/glibc/glibc-2.36.tar.bz2
wget https://ftpmirror.gnu.org/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz
git clone --depth=1 https://github.com/raspberrypi/linux
tar xf binutils-2.40.tar.bz2
tar xf glibc-2.36.tar.bz2
tar xf gcc-12.2.0.tar.gz
rm *.tar.*
cd gcc-12.2.0
contrib/download_prerequisites
cd ~/gcc_all
cd linux
KERNEL=kernel7
make ARCH=arm64 INSTALL_HDR_PATH=/opt/cross-pi-gcc/aarch64-linux-gnu headers_install
Rakenna Binutils.
cd ~/gcc_all
mkdir build-binutils && cd build-binutils
../binutils-2.40/configure --prefix=/opt/cross-pi-gcc --target=aarch64-linux-gnu --with-arch=armv8 --disable-multilib
make -j 8
make install
Muokkaa gcc-12.2.0/libsanitizer/asan/asanan_linux.cpp. Lisää seuraava koodinpätkä.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Tee gcc:n osittainen build.
cd ~/gcc_all
mkdir build-gcc && cd build-gcc
../gcc-12.2.0/configure --prefix=/opt/cross-pi-gcc --target=aarch64-linux-gnu --enable-languages=c,c++ --disable-multilib
make -j8 all-gcc
make install-gcc
Rakenna osittain Glibc.
cd ~/gcc_all
mkdir build-glibc && cd build-glibc
../glibc-2.36/configure --prefix=/opt/cross-pi-gcc/aarch64-linux-gnu --build=$MACHTYPE --host=aarch64-linux-gnu --target=aarch64-linux-gnu --with-headers=/opt/cross-pi-gcc/aarch64-linux-gnu/include --disable-multilib libc_cv_forced_unwind=yes
make install-bootstrap-headers=yes install-headers
make -j8 csu/subdir_lib
install csu/crt1.o csu/crti.o csu/crtn.o /opt/cross-pi-gcc/aarch64-linux-gnu/lib
aarch64-linux-gnu-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/cross-pi-gcc/aarch64-linux-gnu/lib/libc.so
touch /opt/cross-pi-gcc/aarch64-linux-gnu/include/gnu/stubs.h
Palaa takaisin gcc:hen.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Viimeistele glibc:n rakentaminen.
cd ~/gcc_all/build-glibc
make -j8
make install
Viimeistele gcc:n rakentaminen.
cd ~/gcc_all/build-gcc
make -j8
make install
Tässä vaiheessa meillä on täysi ristiinkääntäjätyökaluketju gcc:n kanssa. Kansiota gcc_all ei enää tarvita. Voit poistaa sen.
Qt6:n rakentaminen
Qt6:n rakentamiseen on kaksi vaihtoehtoa. On ladattavissa "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) versio, joka sisältää qtbase ja kaikki alamoduulit. Tämä on hyvin raskasta tavaraa ja sen kääntäminen vaatii paljon tehoa ja aikaa.
Suosittelen, että käännät qtbase perustaksi ja sen jälkeen käännät vain jokaisen tarvitsemasi alamoduulin erikseen.
Tee kansiot sysrootille ja qt6:lle. Luon nämä kansiot workspace/qt-rpi-cross-compilation -hakemistoon.
cd ~/workspace/qt-rpi-cross-compilation/qt6/src
wget https://download.qt.io/official_releases/qt/6.8/6.8.0/submodules/qtbase-everywhere-src-6.8.0.tar.xz
tar xf qtbase-everywhere-src-6.8.0.tar.xz
Luo tiedosto nimeltä toolchain.cmake osoitteeseen ~/workspace/qt-rpi-cross-compilation/qt6.
Sinun on mukautettava rivi "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" ympäristösi mukaiseksi.
Jos luot projektin QtCreatorissa, sinun on säädettävä "Run" -asetuksia. Kohtaan "Environment" on lisättävä:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Qt-alimoduulien lisääminen
Lisää QML-moduuli
Lataa lähdekoodit:
cd ~/workspace/qt-rpi-cross-compilation/qt6/src
wget https://download.qt.io/official_releases/qt/6.8/6.8.0/submodules/qtshadertools-everywhere-src-6.8.0.tar.xz
tar xf qtshadertools-everywhere-src-6.8.0.tar.xz
wget https://download.qt.io/official_releases/qt/6.8/6.8.0/submodules/qtdeclarative-everywhere-src-6.8.0.tar.xz
tar xf qtdeclarative-everywhere-src-6.8.0.tar.xz
Sinun on tarkistettava riippuvuudet osoitteista ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml ja ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.
Varmista, että tarvittavat moduulit on ensin rakennettava ja asennettava.