Ek het geskryf oor die installering van Raspbian op Raspberry Compute Module en die opstel van kruissamestelling vir QtCreator op Ubuntu 20.
Hierdie blogpos is 'n opdatering van die - op hierdie tydstip - nuutste weergawe 6.8 van Qt, raspi OS Bookworm en Ubuntu 22.04 LTS.
Voorvereistes
Ek het die volgende harde- en sagteware gebruik:
Raspberry Pi 4
raspi OS Bookworm, sonder aanbevole sagteware
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
Notas
As jy 'n skootrekenaar of tafelrekenaar met genoeg RAM- en SVE-kerne het, kan jy die kruissamestelling in 'n virtuele masjien doen. Maar ek het die ervaring gemaak dat 'n inheemse rekenaar baie vinniger is en minder foute lewer.
Kyk na die lêerpaaie en ip-adresse in my kodevoorbeelde en pas dit aan by jou behoeftes.
Ontdek weergawes van gcc, ld en ldd. Bronkode van dieselfde weergawe moet afgelaai word om later kruissamesteller te bou.
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.
Voeg die volgende stuk kode aan die einde van ~/.bashrc en werk veranderinge op:
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
Bou gcc as 'n kruissamesteller
Laai die nodige bronkode af. Jy moet die volgende opdragte volgens jou behoeftes verander. Vir die tyd wat ek hierdie bladsy maak, is hulle:
GCC 12.2.0
binutils 2.40 (ld-weergawe)
glibc 2.36 (ldd-weergawe)
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
Bou 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
Wysig gcc-12.2.0/libsanitizer/asan/asan_linux.cpp. Voeg die volgende stukkie kode by.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Doen 'n gedeeltelike bou van gcc.
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
Bou Glibc gedeeltelik.
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
Terug na gcc.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Voltooi die bou glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
Voltooi die bou van gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
Op hierdie stadium het ons 'n volledige kruissamesteller-gereedskapketting met gcc. Gids gcc_all is nie meer nodig nie. Jy kan dit uitvee.</:code19:></:code18:></:code17:></:code16:></:code15:></:code14:></:code13:></:code12:></:code11:></:code10:></:code9:></:code8:></:code7:>
Gebou Qt6
Daar is twee moontlikhede om Qt6 te bou. Daar is 'n "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) weergawe om af te laai, wat qtbase en alle submodules bevat. Dit is baie swaar goed en het baie krag en tyd nodig om dit saam te stel.
My aanbeveling is om qtbase as basis saam te stel en daarna slegs elke submodule wat jy benodig afsonderlik saam te stel.
Maak vouers vir sysroot en qt6. Ek skep hierdie vouers in my werkspasie/qt-rpi-cross-compilation-gids.
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
Skep 'n lêer met die naam toolchain.cmake in ~/workspace/qt-rpi-cross-compilation/qt6.
U moet die reël "set (TARGET_SYSROOT / home / factory / workspace / qt-rpi-cross-compilation / rpi-sysroot)" aanpas by u omgewing.
As jy 'n projek in QtCreator skep, moet jy die "Run" konfigurasie aanpas. By "Environment" moet jy byvoeg:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Voeg Qt-submodules by
Voeg QML-module by
Laai bronkodes af:
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
Jy moet afhanklikhede by ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml en ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yamlnagaan.
Maak seker dat die vereiste modules eers gebou en geïnstalleer moet word.