移植Qt5.12.9

文章目录

  • 一、获取和编译tslib
  • 二、编译ARM平台Qt5.12.9源码
    • 1. 下载Qt5.12.9源码
    • 2. 修改qmake.conf
    • 3. 配置编译选项
    • 4. 开始编译Qt5.12.9
  • 三、移植Qt到文件系统
    • 1. 烧写文件系统
    • 2. 移植tslib到文件系统
      • 1. 测试tslib
    • 3. 移植Qt到文件系统
    • 4. 配置 Qt5 的环境变量
    • 5. 测试 Qt 运行
  • 四、搭建ARM平台的Qt Creator环境
    • 1. 安装Qt Creator
    • 2. 配置ARM平台的Qt Creator Kits
    • 3. 验证ARM平台的Qt编译
    • 4. 命令行编译Qt工程

一、获取和编译tslib

要想 Qt 支持触摸还需要编译 tslib,以生成触摸相关插件。Tslib 一般在嵌入式系统时用的多,基本的触摸插件都是它。当然还有 xinput 这样的插件,那是用于桌面系统的。嵌入式 Qt一般用的都是 Tslib

关于这一部分,我们在之前都编译过,请查看
tslib
在这一章有介绍。

二、编译ARM平台Qt5.12.9源码

本章简介如何下载 Qt 源码。编译出相应的 Qt 库。在 Windows 平台下的库,后缀一般都是dll,Linux 平台的库后缀都是 so。我们能看到的这些库都叫动态库。运行 Qt 应用程序就需要链接到这些动态库上面。正是因为有这些库的存在,Qt 应用程序才能正常运行。

1. 下载Qt5.12.9源码

我们可以在Qt下载地址https://download.qt.io/找到https://download.qt.io/archive/qt/5.12/5.12.9/single/,进入下载页面如下。
移植Qt5.12.9_第1张图片
在 Windows 上下载好上面 qt-everywhere-src-5.12.9.tar.xz 源码拷贝到 Ubuntu 虚拟机下,
移植Qt5.12.9_第2张图片
解压下载好的 qt-everywhere-src-5.12.9.tar.xz 源码压缩包。解压时间较长,请耐心等待。

tar -vxf qt-everywhere-src-5.12.9.tar.xz

好家伙,提示我磁盘满了(内存不太够,只分配了40G)
移植Qt5.12.9_第3张图片
没办法,只能删掉点东西了。
删掉了大概5.5G东西(都打包移到windows上了)(笑死,最后编译发现内存又不够了,我又赶紧删了2G的东西,总算编译过去了)
解压时间9:00-09:03 中间出去了一下,可能更短

移植Qt5.12.9_第4张图片
解压之后5.5G直接变2.8G了
移植Qt5.12.9_第5张图片
在当前目录出现 qt-everywhere-src-5.12.9 目录夹,此文件夹就是我们解压后的目录。进入此目录。

cd qt-everywhere-src-5.12.9/

移植Qt5.12.9_第6张图片

2. 修改qmake.conf

编辑 mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf,配置相关编译器及路径。由于用户经常复制文档错误,指的是格式或者手敲错误。所以编者将这些配置上传到 gitee 上,提供给用户下载。
路径如下。
https://gitee.com/QQ1252699831/qt5.12.9-conf.git。可以直接在 gitee 上下载这个 qmake.conf。

git clone https://gitee.com/QQ1252699831/qt5.12.9-conf.git

移植Qt5.12.9_第7张图片
下载的文件是
在这里插入图片描述
用下载的qmake.conf替换掉原来的qmake.conf

cp qt5.12.9-conf/qmake.conf qtbase/mkspecs/linux-arm-gnueabi-g++/

在这里插入图片描述
打开查看一下:

vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 

移植Qt5.12.9_第8张图片
如果是这样的,就OK了。

3. 配置编译选项

查看编译选项,输入./configure -help 指令,查看可配置选项。

./configure -help

移植Qt5.12.9_第9张图片
由于配置较长,按需要编译,编者总结了配置项,写了一个脚本。

就是之前下载的那个文件下的 autoconfigure.sh。下载之后修改里面的路径,改为自己的即可!需要修改3处个人路径:

(1) /home/luatao/linux/tool/qt-everywhere-src-5.12.9/arm-qt 为编译输出路径。
(2) /home/luatao/linux/tool/tslib/include 为之前编译的 tslib 头文件路径。
(3) /home/luatao/linux/tool/tslib/lib 为之前编译的 tslib 相关库文件路径。

打开文件,编译

vi qt5.12.9-conf/autoconfigure.sh 

移植Qt5.12.9_第10张图片
移植Qt5.12.9_第11张图片
赋予脚本可执行权限。

chmod +x qt5.12.9-conf/autoconfigure.sh
sudo apt-get install g++ // 配置前请先安装 g++

直接执行 autoconfigure.sh。配置需要一段时间,请耐心等待!

./qt5.12.9-conf/autoconfigure.sh

配置时间:09:35-09:38

移植Qt5.12.9_第12张图片
配置完成如下。若未见此信息,请检查个人配置。切记是使用Ubuntu16,如果是 Ubuntu18 以上,可能出现 C++11 Error,这是我们正点原子忠实用户粉丝反馈的,粉丝解决方法是出现这种错误后,重新解压一次 Qt 源码,重新配置就不会出现 c++11 Error,特此说明。
上面是正点原子的文档说的,但是我是18.04的版本,一次就配置成功了。
移植Qt5.12.9_第13张图片

4. 开始编译Qt5.12.9

直接执行 make 开始编译。
编译时间:09:40-11:20 我擦(等急死了) 好在最后编译成功了。

编译时长由个人计算机速度及分配给虚拟机核心数决定
如按上面操作,遇到编译 Qt 源码出现错误,请重新配置!有可能是个人计算机分配给虚拟机内存太低所导致的,既然 Qt 源码能发布,除了配置错误,几乎不可能有编译错误的!经过编者经验和用户反馈,用户编译的时候会出现类似 sub-xx-make-first-ordered 错误。这个原因可能是虚拟机分配的配置太低及用户目录权限的问题。您可以看见编者都是用普通用户在编译的,尽量不要使用 root 用户和 sudo 权限来编译!除非您比较懂。编译完成如下图。
移植Qt5.12.9_第14张图片
执行安装指令后,查看安装后的内容。

make install

两三分钟就安装好了

ls arm-qt

移植Qt5.12.9_第15张图片

三、移植Qt到文件系统

上面我们终于编译好了 tslib 和 Qt 源码。我们需要移植这些库都开发板系统上才能运行 Qt应用程序!这里特别说明一下。因为正点原子的出厂系统自带 Qt 库和 tslib,是不需要额外移植了。不能将自己编译的 Qt 库移植到出厂系统下!因为如果您不了解出厂系统的环境,就会导致移植的 Qt 库与出厂的 Qt 冲突!导致报错!所以我们需要移植到一个没有 Qt 库的文件系统里。可以直接移植到自己编译的文件系统里。

1. 烧写文件系统

将rootfs.tar.bz2文件系统烧写到开发板上。

特别注意,经过用户反馈,有些用户为了图省事,通过 NFS 挂载文件系统的方式来运行Qt程序。此方法运行Qt程序可能导致网络中断!因为Qt运行会耗一定的性能,而挂载文件系统也会消耗掉一定的性能。所以可能会出现网络中断,串口终端没反应,Qt 程序运行缓慢等情况。所以建议读者烧写系统到板子在的存储或者 TF 卡上。这样更能真实反映 Qt运行的性能!然后烧写文件系统到 eMMC 核心板或者 NandFlash 核心板。

关于系统烧录请看:烧录

2. 移植tslib到文件系统

因为我们之前已经把这一部分放到了文件系统中了,所以我们不需要操作下面的步骤了。这里可以直接测试看看触摸是否可用。

1. 测试tslib

直接输入ts_test // 运行 ts_test 测试触摸是否正常,点击界面的 Draw 测试

触摸屏上点击 Draw 测试能够画出线条,且位置准确,说明 tslib 配置正常。按 Ctrl + c 结束 ts_test 指令。下图为 7 寸 800x480 分辨率的电容屏,使用 tslib 测试效果
移植Qt5.12.9_第16张图片

3. 移植Qt到文件系统

使用下面的指令打包编译安装好的 arm-qt 文件夹打包成 tar.bz2 格式,打包以防止文件丢失。

tar -jcf ./arm-qt.tar.bz2 arm-qt

然后使用U盘拷贝arm-qt.tar.bz2,在USB接口插上U盘(参考上一小节的方法挂载U盘),手动挂载后,在开发板根文件系统上解压到/usr/lib/目录下。如下图,编者已经解压到/usr/lib 目录下。

tar xf arm-qt.tar.bz2 -C /usr/lib

移植Qt5.12.9_第17张图片

4. 配置 Qt5 的环境变量

编辑/etc/profile,在末尾添加以下内容。如下图红色框内。注意要改为个人实际的路径。要想 Qt 程序显示中文,请自行将 windows 下的(路径 C:\Windows\Fonts)下的中文字库放到新建一个/usr/share/fonts/目录下就可以了。若例程有使用到字符,会显示找到不字库。注意 Windwos 的字库仅为个人学习使用,不要用于商业用途!有版权的!

export QT_ROOT=/usr/lib/arm-qt
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_FONTDIR=/usr/share/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/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
export QT_QPA_FB_TSLIB=1

移植Qt5.12.9_第18张图片

5. 测试 Qt 运行

使能 Qt 的配置在/etc/profile 的环境变量,下次开机不用使能,开机会自动使能这个环境变量。

source /etc/profile
/usr/lib/arm-qt/examples/widgets/animation/animatedtiles/animatedtiles //运行编译的示例

在这里插入图片描述
7 寸屏 800x480 显示效果如下(拍照效果略差,实际效果很好),同时点击图中的项,点击什么样的图标就显示什么样的图案。确认触摸正常。Qt 官方例子也十分流畅!开启程序需要提前插鼠标!移植的 Qt 不支持热插拨鼠标(出厂系统支持热插拨),Qt 官方说明需要 libudev 情况下 Qt 才能支持热插拔,请自行解决。

移植Qt5.12.9_第19张图片
移植Qt5.12.9_第20张图片

四、搭建ARM平台的Qt Creator环境

万里长征,终于到搭建 ARM 平台的 Qt Creator 环境这一步了!我们上面只是移植好了 Qt到开发板上。我们还需要编写 Qt 应用程序啊,最后交叉编译 Qt 应用程序才能算完整!本章将介绍 Qt Creator 的安装和交叉编译 ARM 平台的 Qt 环境搭建。

1. 安装Qt Creator

我们想要在 Ubuntu 平台开发 Qt,那么必须要有相应的 IDE 环境,那么 Qt Creator 就是 Qt的 IDE(集成环境),我们就可以使用 Qt Creator 快速编程了。进入网址 http://download.qt.io/archive/qt/5.12/5.12.9/下载 Qt 5.12.9。Qt 官方已经把 Qt Creator 封装在下面这个 qt-opensource-linux-x64-5.12.9.run。我们需要下载这个 qt-opensource-linux-x64-5.12.9.run 直接在 Ubuntu 安装即可。
移植Qt5.12.9_第21张图片
用指令下载,编者复制上面的下载地址,直接在 Ubuntu 终端使用 wget 指令下载。如下。

wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run

移植Qt5.12.9_第22张图片
下载完成得到 qt-opensource-linux-x64-5.12.9.run 这个文件。
移植Qt5.12.9_第23张图片
赋予该文件可执行权限,再执行安装。

chmod u+x qt-opensource-linux-x64-5.12.9.run
sudo ./qt-opensource-linux-x64-5.12.9.run // 建议加 sudo,否则安装在当前目录下。

如无意外,则弹出 Qt 5.12.9 欢迎安装界面。
移植Qt5.12.9_第24张图片
这里需要填写 Qt 帐号,去 Qt 官网 https://www.qt.io/注册一个账号。填写后再点击 Next。
移植Qt5.12.9_第25张图片
同意使用条款。按如下步骤操作。
移植Qt5.12.9_第26张图片
欢迎安装界面,直接点击下一步
移植Qt5.12.9_第27张图片
选择安装目录,建议默认即可。会安装在/opt 目录下。点击下一步。
移植Qt5.12.9_第28张图片
按需要安装,除了安卓选项我们都选择安装。点击下一步。
移植Qt5.12.9_第29张图片
同意许可协议,点击下一步。
移植Qt5.12.9_第30张图片
准备安装,点击安装

内存不够出现下面的情况
移植Qt5.12.9_第31张图片
删除一些东西之后
移植Qt5.12.9_第32张图片
等待安装
移植Qt5.12.9_第33张图片
安装完成,点击完成
移植Qt5.12.9_第34张图片
还剩1.8G,啊,我好难
移植Qt5.12.9_第35张图片

2. 配置ARM平台的Qt Creator Kits

直接搜索Qt Creator”图标后再单击打开
移植Qt5.12.9_第36张图片
打开 Qt Creator 界面,找到 Tools(工具)》Options(选项)。
移植Qt5.12.9_第37张图片
配置 qmake
按下图步骤,找到我们编译出来的 ARM 平台的 Qt 库安装文件夹 arm-qt 下的 qmake。
移植Qt5.12.9_第38张图片
配置 C++编译器
移植Qt5.12.9_第39张图片
我们在前面安装的 C++编译器为 arm-linux-gnueabihf-g++。按如下步骤配置,选择 Compiler path 的路径为我们安装的交叉编译器路径/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++。
移植Qt5.12.9_第40张图片
配置 Kits

按如下图步骤操作,在 Name 处改名为 Arm-Qt5.12.9。选择我们配置好的 Compiler 和 QtVersion 即可。
移植Qt5.12.9_第41张图片

3. 验证ARM平台的Qt编译

注意,这里只能编译(构建),不能点击运行,这里是编译出 ARM 平台的 Qt 应用程序,所以是不能在 Ubuntu 这样的 X86 平台上跑的。
移植Qt5.12.9_第42张图片
选择 Application 项目和 Qt Widgets Application 模板。
移植Qt5.12.9_第43张图片
项目命名为 test,选择工程的位置,这里位置不要随便选择,建议放在家目录下(/home/用户名)。
移植Qt5.12.9_第44张图片
默认使用 qmake,点击下一步。
移植Qt5.12.9_第45张图片
选择类模板,默认 QMainWindow 类即可
移植Qt5.12.9_第46张图片
选择文件翻译,默认无,点击下一步
移植Qt5.12.9_第47张图片
选择套件,这里可以两个套件一起选,编译时切换选择 ARM 平台的套件,如下。
移植Qt5.12.9_第48张图片
默认,点击 Finish,完成。
移植Qt5.12.9_第49张图片
选择 ARM 平台所用的 Kits。选择 Debug 构建。
移植Qt5.12.9_第50张图片
按如下步骤点击 Build(构建),不要点击运行!也不要点击左下角的绿色三角符号。
移植Qt5.12.9_第51张图片

编译完成如下图,编译输出窗口。
移植Qt5.12.9_第52张图片
我们可以在工程目录所在的同一级目录下,找到 build-test-Arm_Qt5_12_9-Debug/文件夹,找到编译可执行文件,拷贝 test 文件到开发板文件系统下上执行即可!执行命令为./test。
移植Qt5.12.9_第53张图片
移植Qt5.12.9_第54张图片
报错是因为没有安装中文字库。

4. 命令行编译Qt工程

前提已经安装了交叉编译器,然后我们可以直接在 test 工程文件夹里,直接运行 qmake,生成 Makefile,再执行 make 开始编译。

cd test  // 进入 test 工程文件夹下
/home/luatao/linux/tool/qt-everywhere-src-5.12.9/arm-qt/bin/qmake // qmake 的绝对路径,需要改为自己的
make -j 4

移植Qt5.12.9_第55张图片
编译完成如下图,会在当前文件夹生成 test 文件,拷贝到开发板文件系统下直接使用./test。

至此,已经完成关于 Qt5.12.9 的移植及 Qt Creator 环境搭建。

你可能感兴趣的:(QT5,编译器,嵌入式,linux,QT)