כתבתי על ההתקנה של Raspbian על מודול מחשוב פטל והגדרת הידור צולב עבור QtCreator על אובונטו 20.
פוסט בלוג זה הוא עדכון לגרסה - בשלב זה - החדשה ביותר 6.8 של Qt, raspi OS Bookworm ו- Ubuntu 22.04 LTS.
דרישות מוקדמות
השתמשתי בתוכנות הקשיחות הבאות:
Raspberry Pi 4
raspi OS Bookworm, ללא תוכנה מומלצת
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
הערות
אם יש לך מחשב נייד או שולחני עם מספיק RAM וליבות CPU, אתה יכול לעשות את ההידור הצלב במחשב וירטואלי. אבל עשיתי את החוויה, שמחשב נייטיב הוא הרבה יותר מהיר ומייצר פחות שגיאות.
עיין בנתיבי הקבצים ובכתובות ה- IP בדוגמאות הקוד שלי והתאם אותם לצרכים שלך.
גלה גרסאות של gcc, ld ו- ldd. יש להוריד קוד מקור של אותה גרסה כדי לבנות מהדר צולב מאוחר יותר.
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.
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 כמהדר צולב
הורד את קוד המקור הדרוש. עליך לשנות את הפקודות הבאות בהתאם לצרכיך. בזמן שאני עושה את הדף הזה, הם:
GCC 12.2.0
Binutils 2.40 (גרסת LD)
glibc 2.36 (גרסת 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
ערוך gcc-12.2.0/libsanitizer/asan/asan_linux.cpp. הוסף את קטע הקוד הבא.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
לעשות בנייה חלקית של 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
בנייה חלקית של גליבק.
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.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
גימור בניית glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
סיום בניית gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
בשלב זה, יש לנו שרשרת כלים מלאה של מהדר צולב עם gcc. gcc_all תיקיה אינו נחוץ עוד. אתה יכול למחוק אותו.</:code19:></:code18:></:code17:></:code16:></:code15:></:code14:></:code13:></:code12:></:code11:></:code10:></:code9:></:code8:></:code7:>
בניין Qt6
ישנן שתי אפשרויות לבנות Qt6. יש גרסת "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) להורדה, המכילה qtbase ואת כל תת המודולים. זה חומר כבד מאוד וצריך הרבה כוח וזמן כדי להרכיב אותו.
ההמלצה שלי היא, לקמפל qtbase כבסיס ולאחר מכן לקמפל רק כל תת מודול שאתה צריך בנפרד.
צור תיקיות עבור sysroot ו qt6. אני יוצר תיקיות אלה בספריית סביבת העבודה/qt-rpi-cross-compilation שלי.
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
צור קובץ בשם toolchain.cmake ב~/workspace/qt-rpi-cross-compilation/qt6.
עליך להתאים את השורה "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" לסביבה שלך.
אם אתה יוצר פרויקט ב- QtCreator, עליך להתאים את תצורת "Run". ב "Environment" אתה צריך להוסיף:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
הוספת תת-מודולים של Qt
הוסף מודול QML
הורד קודי מקור:
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 ו ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.