IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Qt5.12.11交叉编译+64位ARM_aarch64+全志H5 CortexA53 -> 正文阅读

[C++知识库]Qt5.12.11交叉编译+64位ARM_aarch64+全志H5 CortexA53

1、准备工作

? ? ?购买的H5开发板,附带资料里面只有关于qt4.8的支持,Qt5新增了很多插件,为了在H5上运行Qt5的程序,需要交叉编译Qt5版本的源码,记录下编译Qt5.12.11版本的源码交叉编译。

硬件:NanoPi K1 Plus,采用H5芯片,ARMv8架构,aarch64指令集。

Qt版本5.12.11:下载地址,https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.12/5.12.11/single/qt-everywhere-src-5.12.11.tar.xz

虚拟机:Ubuntu20.04LTS 桌面版。

交叉编译器:https://releases.linaro.org/components/toolchain/binaries/6.3-2017.02/aarch64-linux-gnu/

我编译了Qt5.12.9和Qt5.12.11两个版本的源码,方法一样,最后都能运行在开发板上。

2、安装交叉编译工具

? ? 将交叉编译工具压缩包gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar拷贝到虚拟机目录下,我使用的是Xftp这个工具。然后使用tar命令解压缩,然后添加到环境变量中,添加到/etc/profile目录下,使用source? /etc/profile命令,使环境变量生效,然后使用aarch64-linux-gnu-gcc -v命令查看工具是否安装成功,也可以将环境变量添加到当前用户的家目录的的.bashrc目录下。

在/etc/profile文件的最后添加交叉编译工具安装路径,使用source /etc/profile命令生效环境变量。

3、修改qmake.conf文件

? ? ? 将第一步下载的Qt源码移动到虚拟机中自己新建的文件夹中,我新建的Qt源码存放路径为/opt/qt5.12.11。不同的硬件架构对应不同的qmake.conf,在下载的Qt5.12.11源码中的qtbase/mkspecs/目录下有各种不同的平台,H5使用的是linux-aarch64-gun-g++目录下的qmake配置文件,我们先拷贝一个这个文件的备份,在备份文件中修改qmake.conf。将linux-aarch64-gun-g++这个目录拷贝到与这个文件同一目录下的aarch64目录,如下图所示。

#
# qmake configuration for building with aarch64-linux-gnu-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM=linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts


include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
QMAKE_CXX               =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK              =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objcopy
QMAKE_NM                =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm -P
QMAKE_STRIP             =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
load(qt_config)

上图为Qt源码文件夹中qtbase/mkspecs/aarch64/qmake.conf文件内容。为了避免修改错误aarch64为拷贝的qtbase/mkspecs/aarch64/linux-aarch64-gun-g++文件。

4、配置编译选项

在解压的Qt5.12.11源码目录下使用./configure -help命令,可以查看编译配置选项。一般将需要编译的内容添加到一个shell脚本中,在源码的顶层目录下新增autoconfigure.sh这个文件的名称可以随便定义。下面为文件的内容。

./configure -prefix /opt/qt5.12.11/qt/arm-qt \     这个路径是我们自己新建的目录,编译后的文件就会在这个目录下面,如果拷贝时需要删除汉字的注释
	-opensource -confirm-license \
	-release \
	-strip \
	-shared \
	-xplatform aarch64 \      这是我们之前修改的qmake.conf文件的目录名称,如果需要拷贝需要删除汉字注释
	-optimized-qmake \
	-c++std c++11 \
	--rpath=no \
	-pch \
	-skip qt3d \
	-skip qtactiveqt \
	-skip qtandroidextras \
	-skip qtcanvas3d \
	-skip qtconnectivity \
	-skip qtdatavis3d \
	-skip qtdoc \
	-skip qtgamepad \
	-skip qtlocation \
	-skip qtmacextras \
	-skip qtnetworkauth \
	-skip qtpurchasing \
	-skip qtremoteobjects \
	-skip qtscript \
	-skip qtscxml \
	-skip qtsensors \
	-skip qtspeech \
	-skip qtsvg \
	-skip qttools \
	-skip qttranslations \
	-skip qtwayland \
	-skip qtwebengine \
	-skip qtwebview \
	-skip qtwinextras \
	-skip qtx11extras \
	-skip qtxmlpatterns \
	-make libs \
	-make examples \
	-nomake tools -nomake tests \
	-gui \
	-widgets \
	-dbus-runtime \
	--glib=no \
	--iconv=no \
	--pcre=qt \
	--zlib=qt \
	-no-openssl \
	--freetype=qt \
	--harfbuzz=qt \
	-no-opengl \
	-linuxfb \
	--xcb=no \
	--libpng=qt \
	--libjpeg=qt \
	--sqlite=qt \
	-plugin-sql-sqlite \
	-recheck-all

在autoconfigure.sh中添加上面的内容后,给文件使用chmod 777 autoconfigure.sh给文件添加执行的权限,然后运行./autoconfigure,生成makefile文件。

如果配置编译选项没有错误,运行了autoconfigure.sh文件后没有错误就会出现类似上图的显示,如果没有出现,可能是autoconfigure.sh文件错误,我当时也是拷贝的别人的文件,结果很多不能被识别的字符,格式需要注意。

5、make

运行了.autocinfigure.sh文件后,就可以执行make命令了。根据机器的配置不同,不同的机器make的时间不同。我使用time (make -j16)命令执行make,time可以测试make所消耗的时间。

6、make install

make完成后就可以执行make install命令了,make install命令执行完之后就能在我们新建的arm-qt目录下面生成在可以再我们目标开发板上运行的qt环境了,将这个arm-qt文件,全部拷贝到目标开发板上,然后添加qt5运行的环境就能运行qt5的程序了。

上图中显示的目录就是我们最后编译出来的文件,将这个文件夹拷贝到开发板中,我使用的是nfs方式拷贝到开发板的。

7、开发板中运行

上图是通过串口与开发板通信,显示的目录为之前编译出来的arm-qt目录。在开发板的/etc/profile文件的最后添加Qt运行的环境变量。

export QT_ROOT=/usr/lib/arm-qt  #虚拟机中编译出来的arm-qt文件,根据自己的目录来填写
export QT_QPA_FONTDIR=/usr/share/fonts #字体的目录,如果Qt中有中文显示,需要拷贝电脑C盘中的字体文件到这个目录下面
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins#Qt支持的插件
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
export QML2_IMPORT_PATH=$QT_ROOT/qml

我的开发板没有触摸的显示屏,我使用的是HDMI接口连接的显示器,现在我们可以运行编译出来的目录下面的examples下面的文件,现在运行下图目录下的文件。

上图就是运行/arm-qt/examples/widgets/animation/animatedtiles目录下的animatedtiles可执行文件。上图

上图是运行arm-qt/examples/charts/areachart目录下的areachart可执行文件后的效果。

开发板的Qt5环境就搭建好了,就可以在Ubuntu下面使用QtCreator编写Qt程序,然后使用我们编译出来的qmke及交叉编译工具编译开发板上能运行的程序了,下一天记录下载Ubuntu20.4下面编写一个简单的程序,然后运行在开发板上的例子。下面是我的开发板。

如果有问题欢迎大家一起讨论,谢谢大家的支持。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:27:42  更:2021-07-11 16:28:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 23:27:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码