HuichuangHuiwan
escreva na frente
Oito anos de tempos amargos, picantes, azedos e doces, primavera, verão, outono e inverno, esta vida
Introdução ao Qt:
Qt (pronúncia oficial [kju:t], pronunciada como cute) é uma biblioteca de desenvolvimento C++ multiplataforma, usada principalmente para desenvolver programas de interface gráfica de usuário (Graphical User Interface, GUI). Claro, pode também desenvolver programas sem interface.Programa de linha de comando (Command User Interface, CUI).
Qt suporta muitos sistemas operacionais, como sistemas operacionais gerais Windows, Linux e Unix, sistemas de smartphones Android, iOS e WinPhone, sistemas embarcados QNX, VxWorks e assim por diante.
Embora o Qt seja frequentemente considerado uma biblioteca GUI para o desenvolvimento de aplicativos de interface gráfica, isso não é tudo do Qt; além de desenhar interfaces bonitas (incluindo controles, layout e interação), o Qt também inclui muitas outras funções, como multi-threading , acesso a banco de dados, processamento de imagens, processamento de áudio e vídeo, comunicação de rede, operações de arquivos, etc., tudo isso está integrado no Qt.
Nos estágios iniciais de exploração do processo de instalação, também ocorreram alguns erros desconhecidos. Exploramos o caminho no escuro e fizemos muitos desvios.
Recentemente, como o projeto precisa ser adaptado para sistemas domésticos, o software precisa se adaptar a CPUs de diferentes arquiteturas! Com base nisso, gostaria de compartilhar minha experiência com este artigo. Espero que mais amigos com ideias semelhantes evitem desvios nesta estrada de exploração e permaneçam dentro do tema!
ambiente:
Sistema PC: Ubutu20.04 (arquitetura x86_64) <本机>
Versão Qt: Qt5.12.8 (GCC 9.3.0, 64 bits) <本机>
Versão Qt Creator: 4.11.0 <本机>
Compilador cruzado: gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu <本机>
Doméstico sistema: Kylin Linux Advanced Server versão V10 (4.19.90-25.10.v2101.ky10.aarch64) 部署环境<即arm64架构>
GCC: v8.3.0部署环境<即arm64架构>
1. Veja instruções relacionadas à arquitetura do sistema
Embotamento本机
uname
uname -a
uname -i
uname -r
lsb_release -a
lsb_release -i
lsb_release -r
O Linux da minha aldeia部署环境<即arm64架构>
uname
uname -a
uname -i
uname -r
nkvers
Verifique o número de núcleos da CPU, ele mostrará o número de núcleos lógicos:
lscpu
nproc
2. Construção de ambiente de compilador cruzado ARM64
1) Selecione a ferramenta de compilação: gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu <可选其他版本>
2) Ferramenta de compilação cruzada de instalação do código-fonte:
A versão especificada da instalação do código-fonte é para se adaptar ao ambiente implantado v8.3.0 O autor instalou a versão especificada, você pode consultá-la se não tiver necessidades especiais.3) Instruções para instalar ferramentas de compilação cruzada
①Download: Baixe a versão especificada do compilador
注1:
do arm Developer ;
注2:
Você também pode baixar a versão 8.3.0 através do Baidu Netdisk
② Instalação:
解压:
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
将目标复制到指定目录下:
<Geralmente copie para/optardiretório, eu copiei para~/caminho/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
Então nas variáveis de ambiente/etc/perfil<Autor adicionado neste arquivo> ou~/.bashrcAdicione variáveis globais <Tenha cuidado para adicionar seu próprio caminho correto, o autor não o renomeou antes>
$PATH: O caminho a seguir é o caminho de descompactação de gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
sudo vim /etc/profile
#borrieguo adicionar braço aarch64
exportar PATH=$PATH:~/path/go/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
Em seguida, carregue a variável de ambiente <adicione-a ao arquivo e forneça-a>
source /etc/profile
or
source ~/.bashrc
Verifique se a configuração foi bem-sucedida: Digite aarch64 +TAB para ver se um prompt aparece (a versão correspondente significa que a configuração foi bem-sucedida):
Verifique o caminho de instalação:
which aarch64-linux-gnu-gcc-8.3.0
3) Ferramenta de compilação cruzada de instalação de instruções: 源码安装交叉编译工具和指令安装交叉编译工具选其中一个操作即可
a instalação de instruções se adapta automaticamente à versão apropriada da máquina, o que é mais conveniente sem especificar
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
Após a instalação, verifique se está ok. Digite aarch64- diretamente e pressione a tecla Tab. Se ele puder concluir automaticamente aarch64-linux-gnu-gcc, não haverá problema.
Ver informações da versão:
aarch64-linux-gnu-gcc -v
Se você conseguir encontrá-lo conforme mostrado na imagem abaixo, a instalação está concluída.
Verifique o caminho de instalação:
which aarch64-linux-gnu-gcc
4) Teste de compilação do código-fonte:
para verificar ainda mais se o ambiente de compilador cruzado foi estabelecido com sucesso, você pode compilar o código-fonte para teste de verificação. (Pode ser omitido)
O que o autor está verificando é um programa C++.principal.cppO conteúdo é o seguinte:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
Vaiprincipal.cppO código-fonte é compilado em um arquivo executável arm64 com as seguintes instruções:
aarch64-linux-gnu-g++ -o main main.cpp
Após a conclusão da compilação, use file
o comando para verificar se o tipo de arquivo é ELF:64bit LSB shared object,ARM aarch64...
. Nesse caso, conclua a compilação do código-fonte.
file main
Você também pode usar readelf -h
o comando para verificar se a arquitetura do sistema de arquivos é AArch64
. Nesse caso, conclua a compilação do código-fonte.
readelf -h main
3. Compilação Qt construção do ambiente arm64
1) Selecione a versão Qt: 5.12.8 <可选其他版本>
2) Download do código-fonte Qt:
Como você executará o programa Qt na placa de desenvolvimento posteriormente, você deve baixar o pacote de código-fonte Qt e compilá-lo com uma ferramenta de compilação cruzada para obter um programa que pode ser executado na plataforma de destino Qt SDK. A versão do Qt na minha máquina é Qt5.12.8 (GCC 9.3.0, 64 bits), então baixei o código-fonte do Qt5.12.8 para construir dois ambientes Qt (x86_64 e arm64) na minha máquina. Configure o ambiente de compilação ARM64 no PC local. Após a conclusão da compilação no PC local, configure o ambiente de compilação cruzada Qt, use Qt para compilar o código que você escreveu e, finalmente, copie e implante-o para execução na plataforma ARM .
注1:
Endereço de download do site oficial do Qt
注2:
Download do disco de rede Baidu v5.12.8
3) Instalação do código-fonte Qt:
① Descompactação:
Baixe qt-everywhere-src-5.12.8.tar.xz, use o comando xz para descompactar o arquivo qt-everywhere-src-5.12.8.tar e, em seguida, use o comando tar para descompactar o arquivo qt -everywhere-src-5.12.8.tar, obtenha a pasta: 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
② Defina o caminho de instalação do SDK
强烈不建议在Qt源码的目录下直接进行编译,那样会污染源码所在目录。建议在Qt源码所在的同级目录下,新建一个文件夹用来存放编译过程中产生的临时文件。一定要注意源码路径不能含有中文!
e crie o caminho do processo de compilação:
mkdir Qt-5.12.8-build
Crie o caminho de instalação final:
mkdir Qt-5.12.8-arm64
③Instalar
安装准备1)
abertoqt-everywhere-src-5.12.8/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.confArquivo de configuração e modifique-o para o seguinte conteúdo. Como usaremos o conteúdo deste posteriormente, precisamos primeiro modificar o compilador aqui.
Compile e modifique de acordo com seu próprio compilador cruzado. O compilador cruzado desta máquina é o seguinte aarch64-linux-gnu-
:
Nota: No arquivo qmake.conf acima, se o Ubuntu tiver vários compiladores cruzados, certifique-se de adicionar o caminho absoluto na frente do compilador cruzado, caso contrário, erros como "não encontrado" aparecerão quando eu fizer pela primeira vez, ou o seguinte ocorrem erros
Makefile:51: receita para o destino 'sub-corelib-make_first' falhou
make[2]: *** [sub-corelib-make_first] Erro 2
make[2]: Saindo do diretório '~/path/qt/qt-everywhere- opensource-src-5.12.8/qtbase/src'
Makefile:46: receita para o destino 'sub-src-make_first' falhou
make[1]: *** [sub-src-make_first] Erro 2
make[1]: Saindo diretório '~/path/qt/qt-everywhere-opensource-src-5.12.8/qtbase'
Makefile:77: receita para o destino 'module-qtbase-make_first' falhou no
make: *** [module-qtbase-make_first] Erro 2
安装准备2)
Entre na pasta Qt-5.12.8-build para executar o configure
./../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 sua pasta de instalação, que é o caminho de instalação final definido acima. Observe que os diretórios devem corresponder;
-xplatform representa o compilador que você especificou;
-no-opengl -no significa não compilar o módulo; pular a compilação do openGL ( Como já instalei o Qt, não preciso de interface);
-skip qtdeclarative pula a compilação qtdeclarative;
outros parâmetros:
-opensource compila a versão open source -commercial compila a versão comercial (parâmetros opcionais);
-static gera uma biblioteca estática .a file- shared gera biblioteca dinâmica para arquivos (parâmetros opcionais, o padrão é compartilhado)注:静态库与动态库区别是在生成目标文件的链接方式上,静态库采用静态链接,在生成的目标文件(如执行文件)中会包含库文件代码,而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。
-force-debug-info força a geração de informações de depuração (parâmetros opcionais)这个参数是让Qt release版本也生成.pdb文件。这个文件有什么作用呢?它就是我们在release版本下设置了异常捕获信息函数,打印出错堆栈信息所必须的文件。如果程序没用开启异常捕获选项,是不需要开启这个参数的。
-opengl dynamic especifica a biblioteca opengl (parâmetros opcionais)
OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。 OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。 OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
-skip ignora o module
-nomake não compila o módulo
-mp para iniciar a compilação multi-core
Nota: Ambos -skip e -nomake podem ser omitidos, mas o parâmetro -skip qtdeclarative não pode ser omitido. O módulo qtdeclarative possui bibliotecas das quais depende. Se você não pular a compilação aqui, ela falhará.
Se você tiver outras necessidades, poderá visualizar comandos específicos com ./configure -help
Você também pode usar o comando "vim autoconfigure.sh" para criar um novo script "autoconfigure.sh", e então precisamos usar o configure para gerar o Makefile. Como o comando é relativamente longo, geralmente criamos um script e depois executamos nosso script para gerar o Makefile.
autoconfigure.sh é o seguinte:
#!/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 \
Modifique as permissões:
sudo chmod +x autoconfigure.sh
Execute o script:
./autoconfigure.sh
Quando solicitado a selecionar uma versão, digite o e pressione Enter.
Pergunte se deseja aceitar o acordo, digite y e pressione Enter
安装准备3)
Compilar e instalar
Demora cerca de dez minutos para compilar
make -j4 2>&1 | tee build.log
make install
Após a conclusão, insira o caminho ~/path/qt/Qt-5.12.8-arm64/lib para visualizar as propriedades do arquivo. A arquitetura do sistema é AArch64
readelf -h libQt5DBus.so
É disso que precisamos, copie para a placa de desenvolvimento quando chegar a hora
4. Configure o compilador cruzado aarch64 nativo do Qt
1) Configuração do compilador (Compliers):
Compiladores (Compliers) Depois de instalar a ferramenta de compilação cruzada, o sistema pode encontrá-la automaticamente. Se não conseguir encontrá-lo, você mesmo precisará adicioná-lo por meio do botão Adicionar.
which aarch64-linux-gnu-gcc
which aarch64-linux-gnu-g++
添加步骤:
Compilador C++
Após a conclusão da configuração, clique no botão Aplicar para aplicá-la.
Compilador C
Após a conclusão da configuração, clique no botão Aplicar para aplicá-la.
2) Configuração das versões Qt:
Qt Versions precisa adicionar uma versão customizada, qmake precisa do qmake recém-compilado e instalado
Após a conclusão da configuração, clique no botão Aplicar para aplicá-la.
3) Configuração do kit de construção (Kit):
O kit precisa selecionar sua versão Qt e compilador recém-adicionados.
Após a conclusão da configuração, pressione o botão Aplicar para aplicá-la e entrar em vigor e pressione o botão OK para concluir a configuração.
5. Estabelecimento do projeto e verificação de compilação
Crie um novo projeto e selecione o build kit (Kit) configurado acima
Após a compilação, você obtém o arquivo executável:
O arquivo executável é da arquitetura ARM aarch64 e a verificação foi bem-sucedida!
Neste ponto, parabéns! O ambiente de compilação cruzada do Qt foi instalado com sucesso e você pode começar a usá-lo! ! !
O próximo tutorial falará sobre: Tutorial Qt 4-Use o QEMU para construir um ambiente de desenvolvimento de simulação arm64 (aarch64) no Ubuntu (x86_64) , para que seu programa compilado da arquitetura ARM aarch64 possa ser executado e verificado nesta máquina!
Os tutoriais subsequentes também falarão sobre: Qt Tutorial 5 - O programa QT com compilação cruzada SSH no Ubuntu (x86_64) é implantado diretamente no sistema doméstico remoto (arquitetura ARM aarch64) , permitindo que você configure o programa de arquitetura ARM aarch64 desenvolvido pelo Qt em seu máquina local configurando o compilador cruzado Qt SSH aarch64 para compartilhar o ambiente a ser implantado para implementar a verificação de execução diretamente no Qt nativo!
Obrigado pela leitura. Meu nome é Huichuang Huiwan. Espero que o artigo possa resolver seu problema.
Tudo deve ser feito ao extremo!