Raspberry Compute Module üzerinde Raspbian kurulumu ve Ubuntu 20 üzerinde QtCreator için çapraz derleme kurulumu hakkında yazmıştım.
Bu blog yazısı, Qt, raspi OS Bookworm ve Ubuntu 22.04 LTS'un - şu anda - en yeni 6.8 sürümü için bir güncellemedir.
Ön Koşullar
Aşağıdaki donanım ve yazılımı kullandım:
Raspberry Pi 4
raspi OS Bookworm, önerilen yazılım olmadan
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
Notlar
Yeterli RAM ve CPU çekirdeğine sahip bir dizüstü veya masaüstü bilgisayarınız varsa, çapraz derlemeyi sanal bir makinede yapabilirsiniz. Ancak ben yerel bir bilgisayarın çok daha hızlı olduğunu ve daha az hata ürettiğini deneyimledim.
Kod örneklerimdeki dosya yollarına ve ip adreslerine bir göz atın ve bunları ihtiyaçlarınıza göre ayarlayın.
Gcc, ld ve ldd sürümlerini keşfedin. Daha sonra çapraz derleyici oluşturmak için aynı sürümün kaynak kodu indirilmelidir.
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.
Aşağıdaki kod parçasını ~/.bashrc dosyasının sonuna ekleyin ve değişiklikleri güncelleyin:
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
gcc'yi çapraz derleyici olarak oluşturun
Gerekli kaynak kodunu indirin. Aşağıdaki komutları ihtiyaçlarınıza göre değiştirmelisiniz. Bu sayfayı hazırladığım zaman için, onlar:
gcc 12.2.0
binutils 2.40 (ld sürümü)
glibc 2.36 (ldd sürümü)
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'i oluşturun.
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
gcc-12.2.0/libsanitizer/asan/asan_linux.cpp dosyasını düzenleyin. Aşağıdaki kod parçasını ekleyin.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Kısmi bir gcc derlemesi yapın.
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
Kısmen Glibc oluşturun.
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
Gcc'ye geri dönün.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Glibc oluşturmayı bitir.
cd ~/gcc_all/build-glibc
make -j8
make install
Gcc'yi oluşturmayı bitir.
cd ~/gcc_all/build-gcc
make -j8
make install
Bu noktada, gcc ile tam bir çapraz derleyici araç zincirine sahibiz. gcc_all klasörüne artık gerek yok. Onu silebilirsiniz.
Qt6'yı Oluşturma
Qt6'yı oluşturmak için iki olasılık vardır. İndirmek için qtbase ve tüm alt modülleri içeren bir "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) sürümü vardır. Bu çok ağır bir şeydir ve derlemek için çok fazla güç ve zaman gerekir.
Benim tavsiyem, qtbase adresini temel olarak derlemeniz ve daha sonra sadece ihtiyacınız olan her bir alt modülü ayrı ayrı derlemenizdir.
Sysroot ve qt6 için klasörler oluşturun. Bu klasörleri çalışma alanım/qt-rpi-cross-compilation dizininde oluşturuyorum.
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
~/workspace/qt-rpi-cross-compilation/qt6 içinde toolchain.cmake adında bir dosya oluşturun.
"set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" satırını ortamınıza göre ayarlamanız gerekir.
QtCreator'da bir proje oluşturursanız, "Run" yapılandırmasını ayarlamanız gerekir. "Environment" adresinde eklemeniz gerekir:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Qt Alt Modülleri Ekleme
QML modülü ekleyin
Kaynak kodlarını indirin:
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
~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml ve ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml adreslerindeki bağımlılıkları kontrol etmeniz gerekir.
Önce gerekli modüllerin oluşturulup yüklendiğinden emin olun.