C/C++教程

Ubuntu配置基于aarch64的Qt编译环境

本文主要是介绍Ubuntu配置基于aarch64的Qt编译环境,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

下载编译器

Linaro Releases

这里面版本很多,主要是大小端、armv7/armv8、32/64位、裸机/linuxdeng区别

对于32位平台,下载如下,

Linaro Releases

对于64位平台,下载如下,

Linaro Releases

将编译器解压、重命名和复制到指定目录,

32位平台的编译器gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz操作如下

解压命令:

$ tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

重命名命令:

$ mv gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf arm-linux-gnueabihf-7.5.0

将目标复制到/opt目录下,

$ sudo cp -rf arm-linux-gnueabihf-7.5.0/ /opt

64位平台的编译器gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz操作如下

解压命令:

$ tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

重命名命令:

$ mv gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu aarch64-linux-gnu-7.5.0

将目标复制到/opt目录下,

$ sudo cp -rf aarch64-linux-gnu-7.5.0/ /opt

安装完成后,还需要手动添加环境变量,修改/etc/bash.bashrc文件

$ sudo vim /etc/bash.bashrc

在文件的最后添加如下命令:

#32位arm编译器

PATH=$PATH:/opt/arm-linux-gnueabihf-7.5.0/bin

#64位arm编译器

PATH=$PATH:/opt/aarch64-linux-gnu-7.5.0/bin

然后立即生效,

$ source /etc/bash.bashrc

检查一下配置情况,

$ arm-linux-gnueabihf-gcc –v

$ arm-linux-gnueabihf-g++ -v

$ aarch64-linux-gnu-gcc –v

$ aarch64-linux-gnu-g++ -v

下载Qt源码包

因为后面要在开发板上跑qt程序,所以必须下载qt源码包,然后用交叉编译工具进行编译,才能得到在目标平台上可以运行的qt SDK

我下载的是5.12.1版本:qt-everywhere-src-5.12.1.tar.xz

下载地址:Index of /archive/qt/5.12/5.12.1/single

定义Qt5.12.1的SDK路径

编译前确定好SDK路径。因为我需要编译两个版本,所以,我建了两个目录, /opt/qt-5.12.1-arm用来存放32位的,/opt/qt-5.12.1-arm64用来存放64位的

$ sudo mkdir qt-5.12.1-arm

$ sudo mkdir qt-5.12.1-arm64

解压qt源码

$ tar xvf qt-everywhere-src-5.12.1.tar.xz

切换路径

$ cd qt-everywhere-src-5.12.1/

修改qmake.conf

对于32位平台:

修改文件./qt-everywhere-src-5.12.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

原始的编译器环境为:

# modifications to g++.conf

QMAKE_CC                = arm-linux-gnueabi-gcc

QMAKE_CXX               = arm-linux-gnueabi-g++

QMAKE_LINK              = arm-linux-gnueabi-g++

QMAKE_LINK_SHLIB        = arm-linux-gnueabi-g++

# modifications to linux.conf

QMAKE_AR                = arm-linux-gnueabi-ar cqs

QMAKE_OBJCOPY           = arm-linux-gnueabi-objcopy

QMAKE_NM                = arm-linux-gnueabi-nm -P

QMAKE_STRIP             = arm-linux-gnueabi-strip

load(qt_config)

将其修改成自己的编译器环境,如下所示,

# modifications to g++.conf

QMAKE_CC                = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-gcc

QMAKE_CXX               = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-g++

QMAKE_LINK              = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-g++

QMAKE_LINK_SHLIB        = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-g++

# modifications to linux.conf

QMAKE_AR                = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-ar cqs

QMAKE_OBJCOPY           = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-objcopy

QMAKE_NM                = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-nm -P

QMAKE_STRIP             = /opt/arm-linux-gnueabihf-7.5.0/bin/arm-linux-gnueabihf-strip

load(qt_config)

对于64位平台:

修改文件./qt-everywhere-src-5.12.1/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf

原始的编译器环境如下,

# modifications to g++.conf

QMAKE_CC                = aarch64-linux-gnu-gcc

QMAKE_CXX               = aarch64-linux-gnu-g++

QMAKE_LINK              = aarch64-linux-gnu-g++

QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++

# modifications to linux.conf

QMAKE_AR                = aarch64-linux-gnu-ar cqs

QMAKE_OBJCOPY           = aarch64-linux-gnu-objcopy

QMAKE_NM                = aarch64-linux-gnu-nm -P

QMAKE_STRIP             = aarch64-linux-gnu-strip

load(qt_config)

将编译器信息修改成自己的环境,如下所示,

# modifications to g++.conf

QMAKE_CC                = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-gcc

QMAKE_CXX               = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-g++

QMAKE_LINK              = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-g++

QMAKE_LINK_SHLIB        = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-g++

# modifications to linux.conf

QMAKE_AR                = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-ar cqs

QMAKE_OBJCOPY           = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-objcopy

QMAKE_NM                = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-nm -P

QMAKE_STRIP             = /opt/aarch64-linux-gnu-7.5.0/bin/aarch64-linux-gnu-strip

load(qt_config)

当然,如果你下载的是其他交叉编译器,换成你对应的平台交叉编译器即可。如果不知道如何修改,可在终端上输入aarch64-linux-gnu-gcc -v,打印出来信息中有一行Target:后面的内容替换上面原内容中的arm-linux-gnueabi即可。

执行configure

编译32位

进入路径qt-everywhere-src-5.12.1中,执行configure命令,具体参数如下,

$ ./configure -release -nomake examples -no-iconv -no-opengl -no-assimp -no-qt3d-profile-jobs -no-qt3d-profile-gl -xplatform linux-arm-gnueabi-g++ -prefix /opt/qt-5.12.1-arm -opensource -confirm-license

这里,有很多配置项,简单说明下:

-prefix选项后面的路径就是第一步中定义的Qt SDK路径,对于不同的平台,注意目录要对应

-no-opengl -no表示不编译该模块

删掉了opengl、Qt3D相关的库、examples,编译他们三个可能会导致编译失败

还有一些参数,可以参考其它文章。

开始编译,

注意检查python环境,如果没有需要提前安装。

$ sudo make -j4

大概编译十来分钟

开始安装

$ sudo make install

完成后进入/opt/qt-5.12.1-arm/lib路径,可以查看文件属性,

$ readelf -h libQt5Xml.so

系统架构为ARM

编译64位,

进入路径qt-everywhere-src-5.12.1中,执行configure命令,具体参数如下,

$ ./configure -recheck-all -release -extprefix /opt/qt-5.12.1-arm64 -xplatform linux-aarch64-gnu-g++ -no-opengl -no-openssl -nomake tests -no-compile-examples -nomake examples -gif -ico -qt-libpng -qt-libjpeg -qt-sqlite

开始编译,

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

开始安装

$ sudo make install

切换路径至/opt/qt-5.12.1-arm64/lib查询文件信息,

$ readelf -h libQt5Xml.so

系统架构为AArch64

测试

安装QT

下载qt-opensource-linux-x64-5.12.1.run图形化安装即可,此处不再赘述。

配置编译器

创建一个HelloWorld程序,默认会在GCC上编译,确保程序编译运行正常。

进入可执行程序目录,查看文件类型,如下所示,

  1. 配置32位ARM交叉编译器

C++

C

设置Qt版本

设置套件Kit

  1. 配置64位aarch64交叉编译器

C++编译器

C编译器

设置Qt的版本

设置套件Kit

选择Aarch64编译程序,并运行,结果如下,

显示的乱码笔者也不懂什么意思。

进入编译路径查询编译生成的二进制文件类型,如下所示,

参考文献

  1. Qt5.12.0 交叉编译搭建 - yydsLinux - 博客园 (cnblogs.com)
  2. https://blog.csdn.net/colinjen/article/details/114437873?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-2.nonecase
这篇关于Ubuntu配置基于aarch64的Qt编译环境的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!