Simulieren Sie eine ARM-Anwendung, die auf einem x86-Prozessor erstellt wurde, am Beispiel von Qt

Die Leistung moderner Prozessoren wächst sowohl auf stationären Computern als auch in verschiedenen eingebetteten Geräten an Bord, bei denen es sich um ARM-basierte Prozessoren mit dem Linux-Betriebssystem handelt. Heute werden wir im Rahmen dieses Artikels einen ARM-Prozessor-Emulator auf einem x86-Computer starten und darin versuchen, Qt aus der Quelle und einer Testanwendung zu erstellen, d. H. sozusagen mit der Zusammenstellung einer ARM-Anwendung und deren Emulation.



Im ersten Teil des Artikels werden wir den QEMU-Emulator für aarch64 verwenden, im zweiten Teil werden wir den Raspberry-Emulator starten und die Funktionalität der darin enthaltenen Anwendung überprüfen.



In meinem eigenen Namen möchte ich darauf hinweisen, dass dies alles nicht schnell erledigt wird. Wenn Sie versuchen, dies alles zu tun, dauert der gesamte Zyklus mehrere Tage!)







Aufbauend auf Qt-Quellen auf CentOS ARM



Um auf einem Host-System zu installieren, müssen wir den QEMU-Emulator installieren. Bei Debian-basierten Distributionen ist dies das qemu-system-arm-Paket. Um die virtuelle Maschine im grafischen Modus zu verwalten, können Sie virt-manager installieren.



Erstellen Sie nach dem Start eine virtuelle Maschine:







und wählen Sie den Netzwerkstart unter der URL:

mirror.centos.org/altarch/7/os/aarch64. Legen Sie die







Anzahl der Prozessoren und den Arbeitsspeicher fest:







Legen Sie die Größe der Systemfestplatte fest:







Endgültige Einstellungen, Netzwerkauswahl:







Für diejenigen, die herunterladen möchten oder offline installieren, es gibt ein Disk-Image:



arm64



Als nächstes müssen Sie das System im Textmodus auf der Festplatte installieren, die erforderlichen Antwortoptionen auswählen und mit Ja antworten:











Die Montage erfolgt auf der zweiten virtuellen Festplatte. Dazu benötigen wir eine 25-30-GB-Festplatte. Wir erstellen eine neue Festplatte, indem wir die virtuelle Maschine herunterfahren und mit ihr verbinden. Danach starten wir erneut. Lassen Sie uns unsere Festplatte brechen und formatieren:



cfdisk /dev/sdb
mkfs.ext4 /dev/sdb1 -L Qt_Rebuild
mount /dev/sdb1 /30


Warum ist das Dateisystem nicht XFS
XFS, Raspberry, .. XFS.



Nach der Installation stellen wir eine Verbindung zur virtuellen Maschine her und installieren die benötigten Pakete :



yum install centos-release-scl
yum install devtoolset-9-gcc.aarch64
yum install git
export PATH=/opt/rh/devtoolset-9/root/bin/:$PATH
echo clone from git
cd /30
git clone --recursive --single-branch --branch 5.15 git://github.com/qt/qt5.git
cd qt5


Konfigurieren:




./configure -skip qt3d -no-warnings-are-errors -release -recheck-all --prefix /Qt/5.15.0 -opensource -confirm-license -nomake examples -nomake tests -c++std c++17 -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ -xcb-xlib -xcb -feature-thread -feature-xkbcommon -qt-libpng -qt-libjpeg -qt-zlib -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ --recheck-all
...
You need perl in your PATH to make a build from GIT.
Cannot proceed.

#yum install perl


Wir wiederholen den Start der Konfiguration und erhalten:




Creating qmake...
gmake: g++: Command not found
gmake: *** [main.o] Error 127


Installieren Sie den Compiler und konfigurieren Sie ihn erneut:



yum install devtoolset-9-gcc-c++.aarch64
...
ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && libs.xcb && tests.xcb_syslibs && features.xkbcommon-x11' failed.

ERROR: Feature 'xcb-xlib' was enabled, but the pre-condition 'features.xlib && libs.xcb_xlib' failed.

ERROR: Feature 'xkbcommon' was enabled, but the pre-condition 'libs.xkbcommon' failed.

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.


Wir suchen und liefern die notwendigen Pakete:




yum install libxkbcommon-x11-devel
yum install xcb-util-renderutil-devel
yum install libxcb libxcb-devel libXrender libXrender-devel xcb-util-wm xcb-util-wm-devel xcb-util xcb-util-devel xcb-util-image xcb-util-image-devel xcb-util-keysyms xcb-util-keysyms-devel


Wir konfigurieren und erhalten bereits einen Fehler:



ERROR: Feature 'xcb-xlib' was enabled, but the pre-condition 'features.xlib && libs.xcb_xlib' failed.


Fügen Sie weitere Pakete hinzu und sehen Sie sich das Konfigurationsprotokoll an:



 yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel
...
Checking for XCB ICCCM >= 0.3.9... yes
Checking for XCB SHM... yes
Checking for XCB Image >= 0.3.9... yes
Checking for XCB Keysyms >= 0.3.9... yes
Checking for XCB RandR... yes
Checking for XCB XRender... yes
Checking for XCB Renderutil >= 0.3.9... yes
Checking for XCB Shape... yes
Checking for XCB Sync... yes
Checking for XCB Xfixes... yes
Checking for XCB Xinerama... yes
Checking for XCB XKB... yes
Checking for XCB (extensions)... yes
Checking for xkbcommon >= 0.5.0... yes
Checking for xkbcommon-x11... yes
Checking for XCB Xlib... yes
Checking for XCB GLX... yes
...
Qt is now configured for building. Just run 'gmake'.
Once everything is built, you must run 'gmake install'.
Qt will be installed into '/Qt/5.15.0'.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.


Nun, alles ist fertig, aber wir müssen die Optionen prüfen, die für uns nützlich sein können:



  OpenGL:
    Desktop OpenGL ....................... yes
    OpenGL ES 2.0 ........................ no
    OpenGL ES 3.0 ........................ no
    OpenGL ES 3.1 ........................ no
    OpenGL ES 3.2 ........................ no

  OpenSSL ................................ no
    Qt directly linked to OpenSSL ........ no
  OpenSSL 1.1 ............................ no


Und trotzdem brauchen wir wahrscheinlich eine Netzwerkinteraktion der Anwendung, wir arbeiten nicht nur über http:



yum install openssl-devel

Dependencies Resolved

================================================================================
 Package                   Arch          Version               Repository  Size
================================================================================
Installing:
 openssl-devel             aarch64       1:1.0.2k-19.el7       base       1.5 M
Installing for dependencies:
 keyutils-libs-devel       aarch64       1.5.8-3.el7           base        37 k
 krb5-devel                aarch64       1.15.1-46.el7         base       272 k
 libcom_err-devel          aarch64       1.42.9-17.el7         base        31 k
 libkadm5                  aarch64       1.15.1-46.el7         base       175 k
 libselinux-devel          aarch64       2.5-15.el7            base       186 k
 libsepol-devel            aarch64       2.5-10.el7            base        76 k
 libverto-devel            aarch64       0.2.5-4.el7           base        11 k
 pcre-devel                aarch64       8.32-17.el7           base       479 k
 zlib-devel                aarch64       1.2.7-18.el7          base        49 k

Transaction Summary
================================================================================
Install  1 Package (+9 Dependent packages)

Total download size: 2.8 M
Installed size: 6.4 M
Is this ok [y/d/N]: 



Version 1.0.2k, die weniger ist als von Qt verlangt ( Die unterstützte Mindestversion von OpenSSL wurde auf 1.1 erhöht. )



Wir müssen OpenSSL erstellen und dann Qt aus dem Quellcode erstellen:



wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
-bash: wget: command not found
cd /
curl https://www.openssl.org/source/openssl-1.1.1g.tar.gz -o openssl-1.1.1.g.tar.gz
tar -xvf openssl-1.1.1.g.tar.gz 
cd /openssl-1.1.1g
perl Configure
echo   ,   ARM:
perl Configure linux-aarch64
Configuring OpenSSL version 1.1.1g (0x1010107fL) for linux-aarch64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************
make && make install


Anschließend konfigurieren wir Qt erneut und beginnen mit der Erstellung mit dem Befehl make oder make -j4 entsprechend der Anzahl der Prozessoren (wenn Sie eine VM mit 4 Prozessoren erstellen möchten ), die in den Einstellungen der virtuellen Maschine angegeben sind.



Anwendungserstellung stürzt ab bei:



make[3]: Entering directory `/30/qt5/qtsvg/src/svg'
g++ -c -include .pch/Qt5Svg -pipe -O2 -std=c++1z -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -Wno-format-overflow -D_REENTRANT -fPIC -DQT_NO_LINKED_LIST -DQT_NO_FOREACH -DQT_NO_USING_NAMESPACE -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_BUILD_SVG_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_ZLIB_LIB -I. -I../../include -I../../include/QtSvg -I../../include/QtSvg/5.15.0 -I../../include/QtSvg/5.15.0/QtSvg -I/30/qt5/qtbase/include/QtWidgets/5.15.0 -I/30/qt5/qtbase/include/QtWidgets/5.15.0/QtWidgets -I/30/qt5/qtbase/include/QtGui/5.15.0 -I/30/qt5/qtbase/include/QtGui/5.15.0/QtGui -I/30/qt5/qtbase/include/QtCore/5.15.0 -I/30/qt5/qtbase/include/QtCore/5.15.0/QtCore -I/30/qt5/qtbase/include -I/30/qt5/qtbase/include/QtWidgets -I/30/qt5/qtbase/include/QtGui -I/30/qt5/qtbase/include/QtCore -I/30/qt5/qtbase/include/QtZlib -I/30/qt5/qtbase/include/QtZlib/5.15.0 -I/30/qt5/qtbase/include/QtZlib/5.15.0/QtZlib -I.moc -I/usr/include/libdrm -I/usr/include/xcb -I/usr/include/xcb -I/30/qt5/qtbase/mkspecs/linux-g++ -o .obj/qsvgfont.o qsvgfont.cpp
In file included from /30/qt5/qtbase/include/QtGui/qopenglversionfunctions.h:1,
                 from /30/qt5/qtbase/include/QtGui/../../src/gui/kernel/qopenglcontext.h:61,
                 from /30/qt5/qtbase/include/QtGui/qopenglcontext.h:1,
                 from /30/qt5/qtbase/include/QtGui/QtGui:49,
                 from ../../include/QtSvg/QtSvgDepends:4:
/30/qt5/qtbase/include/QtGui/../../src/gui/opengl/qopenglversionfunctions.h: In instantiation of ‘class QVector<double>’:
qsvgstyle_p.h:696:20:   required from here
/30/qt5/qtbase/include/QtGui/../../src/gui/opengl/qopenglversionfunctions.h:201:5: internal compiler error: in tsubst_function_decl, at cp/pt.c:12967
  201 |     QAbstractOpenGLFunctionsPrivate()
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[3]: *** [.obj/qsvgfont.o] Error 1
make[3]: Leaving directory `/30/qt5/qtsvg/src/svg'
make[2]: *** [sub-svg-make_first-ordered] Error 2
make[2]: Leaving directory `/30/qt5/qtsvg/src'
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory `/30/qt5/qtsvg'
make: *** [module-qtsvg-make_first] Error 2


Wir installieren zusätzliche Versionen von Paketen und bei Versuch 3 erhalten wir es:



  1. yum install harfbuzz-devel
  2. yum install at-spi2-atk-devel at-spi2-core-devel dbus-devel glib2-devel graphite2-devel keyutils-libs-devel krb5-devel libcom_err-devel libicu-devel libselinux-devel libsepol-devel libverto-devel pcre-devel zlib-devel
  3. yum install mesa-libGLw-devel


Konfiguration und Montage sind im Gange. Wir erstellen eine Testanwendung in QtCreator (mit Assembly qmake), kopieren die Quellen auf die virtuelle Maschine und erstellen die Anwendung. Binar ist fertig, es bleibt noch auf Himbeere zu testen.



2. Führen Sie den Himbeer-Emulator aus



Da wir im Rahmen dieses Artikels einen ARM-Prozessor emulieren, bedeutet dies, dass wir auch in einer virtuellen Maschine ausgeführt werden. Link 1 Link 2 Link 3 :



Laden Sie das offizielle Image von der Raspberry-Website, den Kernel für den Emulator, herunter und führen Sie es aus (ich habe eine solche Startdatei erstellt):




echo create disk for Qt sources and Projects
qemu-img create -f qcow2 qt-rebuild-25gb-disk.qcow2 25G
cat start-emul.sh
#!/bin/bash

path_img=/home/user/Project/qemu
path_kernel=/home/user/qemu/qemu-rpi-kernel
sudo qemu-system-arm -kernel $path_kernel/kernel-qemu-4.19.50-buster -dtb $path_kernel/versatile-pb-buster.dtb \
-cpu arm1176 -m 256 -M versatilepb -append "root=/dev/sda2 rw" -net nic -net user,hostfwd=tcp::5022-:22 \
-net tap,ifname=vnet0,script=no,downscript=no -hdb $path_img/qt-rebuild-25gb-disk.qcow2 -no-reboot -hda $path_img/2020-05-27-raspios-buster-armhf.img


Versuch, unsere Anwendung zu starten:







Warum ist das so? Wir schauen uns den Prozessor an:







Wir schauen uns die Konfigurationsdatei in CentOS an:



[root@aaarch-qemu qt5]# cat config.summary |grep CPU
Build type: linux-g++ (arm64, CPU features: cx16 neon)


Nun, wir haben eine 64-Bit-Armv8-Anwendung kompiliert und versuchen, sie in einem 32-Bit-Emulator mit einem Armv6-Prozessor auszuführen. Ich hoffe, dass Besitzer von echten Geräten mit neuen 64-Bit-Prozessoren in den Kommentaren abbestellen können, ob sie es geschafft haben, die Anwendung auf einem echten Gerät auszuführen oder nicht.



Nun, es spielt keine Rolle, können wir jetzt im Himbeer-Emulator sammeln? Nach dem Aufruf des Befehls df -h haben wir nur sehr wenig freien Speicherplatz. Am einfachsten war es, die Image-Datei zu kopieren, zu vergrößern, eine virtuelle Maschine mit zwei Dateisystemen durch Erhöhen der Root-Partition auf der zweiten Maschine zu starten und dann das zweite Image zu verwenden. Gehen:



qemu-img convert 2020-05-27-raspios-buster-armhf.img 2020-05-27-raspios-buster-armhf-10gb.qcow2 -O qcow2 -p
qemu-img resize 2020-05-27-raspios-buster-armhf-10gb.qcow2 +6G


Fügen



Sie dem Startskript eine weitere Festplatte hinzu: -hdc 2020-05-27-raspios-buster-armhf-10gb.qcow2



Bearbeiten Sie nach dem Start diese Festplatte sudo cfdisk / dev / sdc:



Größe ändern:







Schreiben und bestätigen Sie Ja:







Vergessen Sie nicht zu überprüfen, dass die Festplatte die Größe hat, die wir brauchen:



sudo mkdir /test
sudo mount /dev/sdc2 /test
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.2G  2.8G  257M  92% /
devtmpfs        124M     0  124M   0% /dev
tmpfs           124M     0  124M   0% /dev/shm
tmpfs           124M  2.0M  122M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           124M     0  124M   0% /sys/fs/cgroup
/dev/sdc1       253M   51M  202M  21% /boot
tmpfs            25M     0   25M   0% /run/user/1000
/dev/sdc2       3.2G  2.7G  358M  89% /test


Etwas von der Größe der mit dem Ordner / test verbundenen SDC-Festplatte wurde nicht hinzugefügt. Beheben wir das Problem:



sudo umount /test
sudo fsck -f /dev/sdc2
sudo resize2fs /dev/sdc2
resize2fs 1.44.5 (15-Dec-2018)
Please run 'e2fsck -f /dev/sdc2' first.

pi@raspberrypi:~ $ e2fsck -f /dev/sdc2
e2fsck 1.44.5 (15-Dec-2018)
e2fsck: Permission denied while trying to open /dev/sdc2
You must have r/w access to the filesystem or be root
pi@raspberrypi:~ $ sudo e2fsck -f /dev/sdc2
e2fsck 1.44.5 (15-Dec-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
rootfs: 106640/217296 files (0.3% non-contiguous), 729343/868352 blocks
pi@raspberrypi:~ $ sudo resize2fs /dev/sdc2
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/sdc2 to 2441216 (4k) blocks.
The filesystem on /dev/sdc2 is now 2441216 (4k) blocks long.

sudo mount /dev/sdc2 /test
pi@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.2G  2.8G  259M  92% /
devtmpfs        124M     0  124M   0% /dev
tmpfs           124M     0  124M   0% /dev/shm
tmpfs           124M  2.0M  122M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           124M     0  124M   0% /sys/fs/cgroup
/dev/sdc1       253M   51M  202M  21% /boot
tmpfs            25M     0   25M   0% /run/user/1000
/dev/sdc2       9.2G  2.7G  6.0G  31% /test


Schalten Sie die virtuelle Maschine aus. Bearbeiten Sie die Datei start-emul.sh erneut, ersetzen Sie die hda-Festplatte durch eine neue und entfernen Sie den Link zur dritten Festplatte -hdc. Wir haben jetzt ein Dateisystem mit mehr Speicherplatz.



Jetzt können wir die Festplatte mit Qt-Quellen der ersten virtuellen Maschine verbinden.



Hinweis: Es ist am besten, Quellen aus temporären Dateien zu "bereinigen", d. H. Geben Sie unseren Status des Git zurück, der sich zum Zeitpunkt des Klonens des Repositorys vor der Konfiguration befand:



cd /30/qt5
git reset --hard
git submodule foreach --recursive 'git reset HEAD . || :'
git submodule foreach --recursive 'git checkout -- . || :'
git clean -d -f -f -x
git submodule foreach --recursive git clean -d -f -f -x


In Debian brauchen wir also:



sudo apt install gcc-arm-none-eabi 
sudo apt install wget build-essential \
 ^libxcb.*-dev \
libopenal-dev \
flite1-dev   libspeechd-dev \
libudev-dev \
libinput-dev \
libxkbcommon-x11-dev curl libssl-dev time -y

sudo apt install libx11-dev -y \
    libfontconfig1-dev \
    libfreetype6-dev \
    libx11-dev \
    libxext-dev \
    libxfixes-dev \
    libxi-dev \
    libxrender-dev \
    libxcb1-dev \
    libx11-xcb-dev \
    libxcb-glx0-dev \
    libxkbcommon-x11-dev \
    mesa-common-dev \
libgl1-mesa-dev 


Konfigurieren:




cd /30/qt5
./configure -skip qt3d -no-warnings-are-errors -release -recheck-all -prefix /Qt/5.15.0 -opensource -confirm-license -nomake examples -nomake tests -c++std c++17 -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ -xcb-xlib -xcb -feature-thread -feature-xkbcommon -qt-libpng -qt-libjpeg -qt-zlib -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ --recheck-all -skip wayland -skip qtwebengine -skip qtwayland


Auch Fehler bekommen:



ERROR: Feature 'xcb-xlib' was enabled, but the pre-condition 'features.xlib && libs.xcb_xlib' failed.

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.


Rat. Haben Sie diese Befehle in das grafische QEMU-Fenster eingegeben? Vergessen Sie nicht, wir haben ssh: Sie müssen in der virtuellen Maschine des ssh-Servers starten : sudo systemctl ssh starten & sudo systemctl ssh aktivieren und vom lokalen Computer aus eine Verbindung zur virtuellen Maschine herstellen ssh pi @ localhost -p 5022 Benutzer pi Passwort Himbeere



Weitere Entwicklungspakete installieren:



sudo apt install wget build-essential  ^libxcb.*-dev libopenal-dev flite1-dev   libspeechd-dev libudev-dev libinput-dev libxkbcommon-x11-dev curl libssl-dev time -y
sudo apt install libasound2-dev libavcodec-dev libclipper-dev libdbus-1-dev libdrm-dev libegl-dev libgles2-mesa-dev
sudo  apt install libx11-dev libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxkbcommon-x11-dev mesa-common-dev libgl1-mesa-dev


Wir konfigurieren und erhalten die Ausgabe der Konfigurationsergebnisse:
time ./configure -skip qt3d -no-warnings-are-errors -release -recheck-all -prefix /Qt/5.15.0 -opensource -confirm-license -nomake examples -nomake tests -c++std c++17 -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ -xcb-xlib -xcb -feature-thread -feature-xkbcommon -qt-libpng -qt-libjpeg -qt-zlib -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ --recheck-all -skip wayland -skip qtwebengine -skip qtwayland



............Done.

Info: creating super cache file /30/qt5/.qmake.super

Info: creating cache file /30/qt5/.qmake.cache

Info: creating stash file /30/qt5/.qmake.stash



This is the Qt Open Source Edition.



You have already accepted the terms of the Open Source license.



Running configuration tests…





Note: Option 'cache_use' with value 'none' was specified twice



Note: Also available for Linux: linux-clang linux-icc



Note: Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing.



WARNING: QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation.



Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation.

On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution.

On macOS, you can use Homebrew's llvm package.

On Windows, you must set LLVM_INSTALL_DIR to the installation path.



Qt is now configured for building. Just run 'make'.

Once everything is built, you must run 'make install'.

Qt will be installed into '/Qt/5.15.0'.



Prior to reconfiguration, make sure you remove any leftovers from

the previous build.



real 91m49.471s

user 78m43.608s

sys 7m22.934s



Anzeigen von Informationen zum Ergebnis der Konfiguration



Wenn Sie bis zu diesem Punkt gelesen haben und immer noch die Begeisterung haben, es zu versuchen, wäre es interessant, Ihr FPS- Ergebnis der Geschwindigkeit der Konfigurationsphase mit einer Beschreibung des Prozessors zu erhalten, auf dem Sie gestartet haben. Dieses Ergebnis ist ein Start auf Intel Core i5 7th Gen. Befolgen Sie für ein Experiment vor dem Start die Hinweise zum "Bereinigen" der Quellen aus der vorherigen Spalte des Artikels.



Jetzt benötigt 1 Kern Ihres Computers viel Zeit, um Qt zu erstellen und möglicherweise zu erstellen, und möglicherweise tritt ein Fehler auf, dass während des Builds nicht genügend Speicher oder ein Fehler vorhanden ist. Zu diesem Zweck empfehle ich, eine 1-1,5-GB-Auslagerungsdatei zu erstellen und diese zu verbinden:



sudo dd if=/dev/zero of=/30/swap1500 bs=256M count=6 status=progress
dd: memory exhausted by input buffer of size 268435456 bytes (256 MiB)

sudo dd if=/dev/zero of=/30/swap1500 bs=128M count=12 status=progress
1610612736 bytes (1.6 GB, 1.5 GiB) copied, 82 s, 19.6 MB/s
12+0 records in
12+0 records out
1610612736 bytes (1.6 GB, 1.5 GiB) copied, 82.223 s, 19.6 MB/s

sudo chmod 600 /30/swap1500
sudo mkswap /30/swap1500
Setting up swapspace version 1, size = 1.5 GiB (1610608640 bytes)
no label, UUID=af79f154-6904-4b6d-8c1d-61890bdda556

sudo swapon /30/swap1500

free
              total        used        free      shared  buff/cache   available
Mem:         252228       24652      142532         536       85044      179184
Swap:       1675256       69888     1605368


Wir sammeln und installieren:



make && sudo make install


Wenn zusätzliche Module benötigt werden, können wir diese jederzeit hinzufügen, z. B. für qtquickcontrols2:



export PATH=/Qt/5.15.0/bin:$PATH
cd /30/qt5/qtuickcontrols2/
qmake
make && sudo make install


Danach sammeln wir die Anwendung und starten sie:







Fazit



Mit dem QEMU-Emulator können Anwendungen für ARM auf x86-Geräten erstellt werden. Ich dachte, ich würde diesen Artikel in einer Woche schreiben, aber der Prozess dauerte fast drei Wochen, da jede der Phasen sehr lange dauert (Installation des Systems, Aktualisierung des Systems, Installation von Entwicklungspaketen sowie Abrufen der Qt-Quellcodes von Github). Das Erstellen der statischen Version von Qt im Raspberry-Emulator dauerte beispielsweise 1426 Minuten.



Ist es schneller Ja, es heißt Cross Build. Konfigurieren Sie dazu sysroot, installieren Sie einen ARM-Compiler, konfigurieren und erstellen Sie Qt auf Ihrem Hostsystem. Anschließend konfigurieren sie QtCreator für die Verwendung dieser Version von Qt und erstellen die Anwendung auf ihrem x86-Computer / Laptop. Sie erhalten eine Version, die unter Embedded Linux funktioniert. Link 1 Link 2weil Dies geht bereits über den Rahmen dieses Artikels hinaus. Vielleicht schreibe ich darüber, wenn ich Zeit oder Inspiration habe, aber vielleicht schreibt jemand anderes, wie dies für die neueste Version von Qt 5.15 zu tun ist.



Nun, ich wiederhole, wenn jemand die Schritte aus dem zweiten Kapitel für den ARM Raspberry-Emulator wiederholen möchte, können Sie schreiben, wie lange Sie brauchen, um qmake und die Konfigurationsphase zu erstellen, und Ihren Prozessor in den Kommentaren angeben.



Vielen Dank für Ihre Aufmerksamkeit. Viel Glück mit Ihrer Kreativität!



All Articles