Saya menulis tentang pemasangan Raspbian pada Modul Pengiraan Raspberry dan kompilasi silang persediaan untuk QtCreator pada Ubuntu 20.
Catatan blog ini ialah kemas kini kepada - pada masa ini - versi terbaru 6.8 Qt, raspi OS Bookworm dan Ubuntu 22.04 LTS.
Prasyarat
Saya menggunakan perisian keras dan perisian berikut:
Raspberry Pi 4
raspi OS Bookworm, tanpa perisian yang disyorkan
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
Nota
Jika anda mempunyai komputer riba atau komputer meja dengan teras RAM dan CPU yang mencukupi, anda boleh melakukan kompilasi silang dalam mesin maya. Tetapi saya membuat pengalaman, bahawa komputer asli jauh lebih pantas dan menghasilkan lebih sedikit ralat.
Sila lihat laluan fail dan alamat ip dalam contoh kod saya dan sesuaikan dengan keperluan anda.
Temui versi gcc, ld dan ldd. Kod sumber versi yang sama hendaklah dimuat turun untuk membina pengkompil silang kemudian.
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.
Lampirkan sekeping kod berikut pada penghujung ~/.bashrc dan kemas kini perubahan:
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
Bina gcc sebagai pengkompil silang
Muat turun kod sumber yang diperlukan. Anda harus mengubah suai arahan berikut mengikut keperluan anda. Buat masa saya membuat halaman ini, ialah:
GCC 12.2.0
Binutils 2.40 (versi LD)
GLIBC 2.36 (versi LDD)
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
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
Edit gcc-12.2.0/libsanitizer/asan/asan_linux.cpp. Tambah sekeping kod berikut.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Lakukan pembinaan separa 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
Membina sebahagiannya 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
Kembali ke gcc.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Selesai membina glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
Selesai membina gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
Pada ketika ini, kami mempunyai rantaian alat pengkompil silang penuh dengan gcc. Folder gcc_all tidak diperlukan lagi. Anda boleh memadamkannya.</:code19:></:code18:></:code17:></:code16:></:code15:></:code14:></:code13:></:code12:></:code11:></:code10:></:code9:></:code8:></:code7:>
Bangunan Qt6
Terdapat dua kemungkinan untuk membina Qt6. Terdapat versi "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) untuk dimuat turun, yang mengandungi qtbase dan semua submodul. Ini adalah perkara yang sangat berat dan memerlukan banyak kuasa dan masa untuk menyusunnya.
Cadangan saya ialah, untuk menyusun qtbase sebagai asas dan selepas itu menyusun hanya setiap submodul yang anda perlukan secara berasingan.
Buat folder untuk sysroot dan qt6. Saya membuat folder ini dalam direktori workspace/qt-rpi-cross-compilation saya.
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
Buat fail bernama toolchain.cmake dalam ~/workspace/qt-rpi-cross-compilation/qt6.
Anda perlu melaraskan baris "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" kepada persekitaran anda.
Jika anda membuat projek dalam QtCreator, anda perlu melaraskan konfigurasi "Run". Pada "Environment" anda perlu menambah:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Tambah Submodul Qt
Tambah modul QML
Muat turun kod sumber:
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
Anda perlu menyemak kebergantungan pada ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml dan ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.
Pastikan modul yang diperlukan hendaklah dibina dan dipasang terlebih dahulu.