Tutorial 3 de Qt: configuración del entorno de compilación cruzada arm64 (aarch64) y el proyecto de arquitectura arm64 de compilación QT en Ubuntu (x86_64)

escribir delante

Ocho años de tiempo amargo, picante, ácido y dulce, primavera, verano, otoño e invierno, esta vida.
Introducción a Qt:
Qt (pronunciación oficial [kju:t], pronunciada igual que lindo) es una biblioteca de desarrollo C++ multiplataforma, que se utiliza principalmente para desarrollar programas de interfaz gráfica de usuario (Interfaz gráfica de usuario, GUI). También desarrolla programas sin interfaz.Programa de línea de comando (Command User Interface, CUI).
Qt admite muchos sistemas operativos, como los sistemas operativos generales Windows, Linux y Unix, los sistemas de teléfonos inteligentes Android, iOS y WinPhone, los sistemas integrados QNX, VxWorks, etc.
Aunque a menudo se considera a Qt como una biblioteca GUI para desarrollar aplicaciones de interfaz gráfica, esto no es todo en Qt; además de dibujar hermosas interfaces (incluidos controles, diseño e interacción), Qt también incluye muchas otras funciones, como multiproceso. , acceso a bases de datos, procesamiento de imágenes, procesamiento de audio y video, comunicación de red, operaciones de archivos, etc., todos estos están integrados en Qt.
En las primeras etapas de exploración del proceso de instalación, también hubo algunos errores desconocidos, exploramos el camino en la oscuridad y tomamos muchos desvíos.
Recientemente, debido a que el proyecto debe adaptarse a sistemas domésticos, el software debe adaptarse a CPU de diferentes arquitecturas. En base a esto, me gustaría compartir mi experiencia con este artículo. ¡Espero que más amigos con ideas afines eviten desvíos en este camino de exploración y se mantengan dentro del tema!
ambiente:
Sistema de PC: Ubutu20.04 (arquitectura x86_64) <本机>
Versión Qt: Qt5.12.8 (GCC 9.3.0, 64 bits) <本机>
Versión Qt Creator: 4.11.0 <本机>
Compilador cruzado: gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu <本机>
Nacional sistema: Kylin Linux Advanced Server versión V10 (4.19.90-25.10.v2101.ky10.aarch64) 部署环境<即arm64架构>
GCC: v8.3.0部署环境<即arm64架构>

1. Ver instrucciones relacionadas con la arquitectura del sistema.

Lo aburrido本机

uname
uname -a
uname -i
uname -r
lsb_release -a
lsb_release -i
lsb_release -r

Insertar descripción de la imagen aquí
El Linux de mi pueblo部署环境<即arm64架构>

uname
uname -a
uname -i
uname -r
nkvers

Insertar descripción de la imagen aquíVerifique la cantidad de núcleos de CPU, mostrará la cantidad de núcleos lógicos:

lscpu
nproc

2. Construcción del entorno de compiladores cruzados ARM64

1) Seleccione la herramienta de compilación: gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu <可选其他版本>
2) Herramienta de compilación cruzada de instalación del código fuente:
la versión especificada de la instalación del código fuente debe adaptarse al entorno implementado v8.3.0 El autor instaló la versión especificada, puede consultarla si no tiene necesidades especiales.3) Instrucciones para instalar herramientas de compilación cruzada
①Descargar: descargue la versión especificada del compilador
注1:desde arm Developer ;
Insertar descripción de la imagen aquí

注2:También puede descargar v8.3.0 a través de la instalación de Baidu Netdisk
②:
解压:

tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz

重命名:

mv  gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu aarch64-linux-gnu-8.3.0 

将目标复制到指定目录下:<Generalmente copiar a/optardirectorio, lo copié a~/ruta/irCatálogo>

sudo cp -rf aarch64-linux-gnu-8.3.0/ /opt 

or

mkdir -p ~/path/go
cp -rf aarch64-linux-gnu-8.3.0/ ~/path/go 

Luego en las variables de entorno./etc/perfil<Autor agregado en este archivo> o~/.bashrcAgregue variables globales <tenga cuidado de agregar su propia ruta correcta, el autor no le cambió el nombre antes>
$PATH: la siguiente ruta es la ruta de descompresión de gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin

sudo vim /etc/profile

#borrieguo agregar arm aarch64
export PATH=$PATH:~/path/go/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin

Insertar descripción de la imagen aquí

Luego cargue la variable de entorno <agréguela al archivo y obtenga la fuente>

source /etc/profile

or

source ~/.bashrc

Verifique si la configuración fue exitosa: Ingrese aarch64 +TAB para ver si aparece un mensaje (la versión correspondiente significa que la configuración fue exitosa):
Insertar descripción de la imagen aquí
Verifique la ruta de instalación:

which aarch64-linux-gnu-gcc-8.3.0

Insertar descripción de la imagen aquí

3) Herramienta de compilación cruzada de instalación de instrucciones: 源码安装交叉编译工具和指令安装交叉编译工具选其中一个操作即可
la instalación de instrucciones se adapta automáticamente a la versión apropiada de la máquina, lo cual es más conveniente sin especificar

sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

Después de la instalación, verifique si está bien, ingrese directamente aarch64- y presione la tecla Tab. Si puede completar automáticamente aarch64-linux-gnu-gcc, entonces no habrá ningún problema.
Ver información de la versión:

aarch64-linux-gnu-gcc -v

Si puede encontrarlo como se muestra en la imagen a continuación, la instalación estará completa.
Insertar descripción de la imagen aquí
Verifique la ruta de instalación:

which aarch64-linux-gnu-gcc

Insertar descripción de la imagen aquí

4) Prueba de compilación del código fuente:
para verificar aún más si el entorno de compilador cruzado se estableció correctamente, puede compilar el código fuente para las pruebas de verificación. (Se puede omitir)
Lo que el autor está verificando es un programa C++.principal.cppEl contenido es el siguiente:

#include <iostream>

using namespace std;

int main()
{
    
    
    cout << "Hello World!" << endl;
    return 0;
}

Voluntadprincipal.cppEl código fuente se compila en un archivo ejecutable arm64 con las siguientes instrucciones:

aarch64-linux-gnu-g++ -o main main.cpp

Una vez completada la compilación, utilice fileel comando para comprobar si el tipo de archivo es ELF:64bit LSB shared object,ARM aarch64.... Si es así, complete la compilación del código fuente.

file main

Insertar descripción de la imagen aquí
También puede utilizar readelf -hel comando para comprobar si la arquitectura del sistema de archivos es AArch64. Si es así, complete la compilación del código fuente.

readelf -h main

Insertar descripción de la imagen aquí

3. Construcción del entorno arm64 de compilación de Qt

1) Seleccione la versión de Qt: 5.12.8 <可选其他版本>
2) Descarga del código fuente de Qt:
debido a que ejecutará el programa Qt en la placa de desarrollo más adelante, debe descargar el paquete de código fuente de Qt y luego compilarlo con una herramienta de compilación cruzada para obtener un programa que se puede ejecutar en la plataforma de destino Qt SDK. La versión de Qt en mi máquina es Qt5.12.8 (GCC 9.3.0, 64 bits), así que descargué el código fuente de Qt5.12.8 para crear dos entornos Qt (x86_64 y arm64) en mi máquina. Configure el entorno de compilación ARM64 en la PC local. Una vez completada la compilación en la PC local, configure el entorno de compilación cruzada de Qt, luego use Qt para compilar el código que escribió y finalmente cópielo e impleméntelo para ejecutarlo en la plataforma ARM. .
注1:Dirección de descarga del sitio web oficial de Qt
Insertar descripción de la imagen aquí

注2:Descarga del disco de red Baidu v5.12.8

3) Instalación del código fuente de Qt:
① Descompresión:
descargue qt-everywhere-src-5.12.8.tar.xz, luego use el comando xz para descomprimir el archivo qt-everywhere-src-5.12.8.tar y luego use el comando tar para descomprimir el archivo qt -everywhere-src-5.12.8.tar, obtenga la carpeta: qt-everywhere-src-5.12.8.

xz -d qt-everywhere-src-5.12.8.tar.xz
tar -xvf qt-everywhere-src-5.12.8.tar

or

tar -xvf qt-everywhere-src-5.12.8.tar.xz

Insertar descripción de la imagen aquí
② Defina la ruta de instalación del SDK
强烈不建议在Qt源码的目录下直接进行编译,那样会污染源码所在目录。建议在Qt源码所在的同级目录下,新建一个文件夹用来存放编译过程中产生的临时文件。一定要注意源码路径不能含有中文!
y cree la ruta del proceso de compilación:

mkdir Qt-5.12.8-build

Cree la ruta de instalación final:

mkdir Qt-5.12.8-arm64

③Instalar
安装准备1)
abiertoqt-everywhere-src-5.12.8/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.confArchivo de configuración y modifíquelo al siguiente contenido. Debido a que usaremos el contenido de esto más adelante, primero debemos modificar el compilador aquí.
Compile y modifique según su propio compilador cruzado. El compilador cruzado de esta máquina es el siguiente aarch64-linux-gnu-
:
Insertar descripción de la imagen aquí
Nota: En el archivo qmake.conf anterior, si Ubuntu tiene varios compiladores cruzados, asegúrese de agregar la ruta absoluta delante del compilador cruzado; de lo contrario, aparecerán errores como "no encontrado" cuando lo haga por primera vez, o lo siguiente ocurren errores

Makefile:51: la receta para el objetivo 'sub-corelib-make_first' falló
make[2]: *** [sub-corelib-make_first] Error 2
make[2]: Saliendo del directorio '~/path/qt/qt-everywhere- opensource-src-5.12.8/qtbase/src'
Makefile:46: receta para el objetivo 'sub-src-make_first' falló
make[1]: *** [sub-src-make_first] Error 2
make[1]: Saliendo directorio '~/path/qt/qt-everywhere-opensource-src-5.12.8/qtbase'
Makefile:77: receta para el destino 'module-qtbase-make_first' falló
: *** [module-qtbase-make_first] Error 2

安装准备2)
Ingrese a la carpeta Qt-5.12.8-build para ejecutar la configuración

./../qt-everywhere-src-5.12.8/configure -prefix /home/airobot/path/qt/Qt-5.12.8-arm64 -make libs -xplatform linux-aarch64-gnu-g++  -skip qtdeclarative -no-opengl

Nota:
-prefix representa su carpeta de instalación, que es la ruta de instalación final definida anteriormente. Tenga en cuenta que los directorios deben corresponder;
-xplatform representa el compilador que especificó;
-no-opengl -no significa no compilar el módulo; omita la compilación de openGL ( Como ya instalé Qt, no necesito una interfaz);
-skip qtdeclarative omite la compilación qtdeclarative;
otros parámetros:
-opensource compila la versión de código abierto -commercial compila la versión comercial (parámetros opcionales);
-static genera una biblioteca estática .un archivo compartido genera una biblioteca dinámica para que los archivos (parámetros opcionales, el valor predeterminado sea compartido) 注:静态库与动态库区别是在生成目标文件的链接方式上,静态库采用静态链接,在生成的目标文件(如执行文件)中会包含库文件代码,而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。
-force-debug-info fuerza la generación de información de depuración (parámetros opcionales) 这个参数是让Qt release版本也生成.pdb文件。这个文件有什么作用呢?它就是我们在release版本下设置了异常捕获信息函数,打印出错堆栈信息所必须的文件。如果程序没用开启异常捕获选项,是不需要开启这个参数的。
-opengl dinámico especifica la biblioteca opengl (parámetros opcionales)
OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。 OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。 OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
-skip omite el El módulo
-nomake no compila el módulo
-mp para iniciar la compilación de múltiples núcleos.
Nota: Se pueden omitir tanto -skip como -nomake, pero el parámetro qtdeclarative -skip no se puede omitir. El módulo qtdeclarative tiene bibliotecas de las que depende. Si no omite la compilación aquí, fallará.
Si tiene otras necesidades, puede ver comandos específicos con ./configure -help

Insertar descripción de la imagen aquí

También puede usar el comando "vim autoconfigure.sh" para crear un nuevo script "autoconfigure.sh", y luego necesitamos usar configure para generar el Makefile. Debido a que el comando es relativamente largo, generalmente creamos un script y luego lo ejecutamos. nuestro script para generar el Makefile.
autoconfigure.sh es el siguiente:

#!/bin/sh
#export PATH=$PATH:~/path/go/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
./../qt-everywhere-src-5.12.8/configure -prefix ~/path/qt/Qt-5.12.8-arm64 \
#-static \
#-release \
-opensource \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
#-optimized-qmake \
#-pch \
#-qt-libjpeg \
#-qt-zlib \
-no-opengl \
#-skip qt3d \
#-skip qtcanvas3d \
#-skip qtpurchasing \
#-no-sse2 \
#-no-sse3 \
#-no-ssse3  \
#-no-sse4.1 \
#-no-sse4.2  \
#-no-avx \
#-no-avx2 \
#-no-mips_dsp \
#-no-mips_dspr2 \
#-qt-zlib \
#-no-openssl \
#-no-xcb 	\
#-no-cups \
#-no-iconv \
#-no-evdev  \
#-no-icu  \
#-no-fontconfig \
#-nomake examples \
#-nomake tools \
#-skip qtvirtualkeyboard \
#-qpa linuxfb	\
#-no-opengl \
#-no-libinput \
#-no-gstreamer \
#-no-system-proxies \
#-no-slog2  \
#-no-lgmon \
#-linuxfb \
#-v \
#-qt-libjpeg \
#-qt-libpng 	\
#-no-libproxy \
#-no-dbus	\
#-no-glib	\
#-no-compile-examples \
-skip qtdeclarative \

Modificar permisos:

sudo chmod +x autoconfigure.sh 

Ejecute el script:

./autoconfigure.sh

Insertar descripción de la imagen aquí

Cuando se le solicite seleccionar una versión, ingrese o y presione Entrar.
Insertar descripción de la imagen aquí

Pregunte si acepta el acuerdo, ingrese y y presione Enter
Insertar descripción de la imagen aquí

安装准备3)
compilar e instalar

Se necesitan unos diez minutos para compilar.

make -j4 2>&1 | tee build.log

Insertar descripción de la imagen aquí

make install

Insertar descripción de la imagen aquí

Una vez completado, ingrese la ruta ~/path/qt/Qt-5.12.8-arm64/lib para ver las propiedades del archivo. La arquitectura del sistema es AArch64.

readelf -h libQt5DBus.so

La arquitectura del sistema es AArch64.

Esto es lo que necesitamos, cópielo a la placa de desarrollo cuando llegue el momento.Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí

4. Configure el compilador cruzado aarch64 nativo de Qt

1) Configuración del compilador (Compliers):

Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí
Compiladores (Compliers) Después de instalar la herramienta de compilación cruzada, el sistema puede encontrarla automáticamente. Si no puede encontrarlo, debe agregarlo usted mismo mediante el botón Agregar.

which aarch64-linux-gnu-gcc
which aarch64-linux-gnu-g++

添加步骤:
compilador de C ++
Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí
Una vez completada la configuración, haga clic en el botón Aplicar para aplicarla.
compilador de C
Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí
Una vez completada la configuración, haga clic en el botón Aplicar para aplicarla.

2) Configuración de versiones Qt:

Qt Versions necesita agregar una versión personalizada, qmake necesita el qmake recién compilado e instalado

Insertar descripción de la imagen aquí

Una vez completada la configuración, haga clic en el botón Aplicar para aplicarla.

3) Configuración del kit de compilación (Kit):
el kit debe seleccionar su versión Qt y su compilador recién agregados.
Insertar descripción de la imagen aquí
Una vez completada la configuración, presione el botón Aplicar para aplicarla y que surta efecto, y presione el botón Aceptar para completar la configuración.

5. Establecimiento del proyecto y verificación de la compilación.

Cree un nuevo proyecto y seleccione el kit de compilación (Kit) configurado anteriormente
Insertar descripción de la imagen aquí

Después de la compilación, obtienes el archivo ejecutable:

Insertar descripción de la imagen aquí
¡El archivo ejecutable es de arquitectura ARM aarch64 y la verificación fue exitosa!

Llegados a este punto, ¡felicidades! ¡El entorno de compilación cruzada de Qt se instaló exitosamente y puede comenzar a usarlo! ! !
El siguiente tutorial hablará sobre: ​​Qt Tutorial 4: use QEMU para construir un entorno de desarrollo de simulación arm64 (aarch64) en Ubuntu (x86_64) , para que su programa de arquitectura ARM aarch64 compilado pueda ejecutarse y verificarse en esta máquina.
Los tutoriales posteriores también hablarán sobre: ​​Qt Tutorial 5: el programa QT con compilación cruzada SSH en Ubuntu (x86_64) se implementa directamente en el sistema doméstico remoto (arquitectura ARM aarch64) , lo que le permite configurar el programa de arquitectura ARM aarch64 desarrollado por Qt en su máquina local configurando el compilador cruzado Qt SSH aarch64 para compartir el entorno que se implementará para implementar la verificación de ejecución directamente en Qt nativo.

Gracias por leer. Mi nombre es Huichuang Huiwan. Espero que el artículo pueda resolver tu problema.
¡Todo debe hacerse al extremo!

Supongo que te gusta

Origin blog.csdn.net/limuyuanrs/article/details/135174144
Recomendado
Clasificación