搭建通用Arm平台的QT交叉编译环境

  1. - [前言](https://editor.csdn.net/md/?articleId=126960630#_1)
  2. - [准备](https://editor.csdn.net/md/?articleId=126960630#_3)
  3. - [一、下载arm平台交叉编译工具链](https://editor.csdn.net/md/?articleId=126960630#arm_7)
  4. * [1.下载工具链](https://editor.csdn.net/md/?articleId=126960630#1_8)
  5. * [2.解压到交叉编译平台(Ubuntu)](https://editor.csdn.net/md/?articleId=126960630#2Ubuntu_11)
  6. * [3.配置环境变量](https://editor.csdn.net/md/?articleId=126960630#3_13)
  7. - [二、下载QT源码(版本与交叉编译工具链版本保持一致)](https://editor.csdn.net/md/?articleId=126960630#QT_20)
  8. - [三、下载并编译tslib库](https://editor.csdn.net/md/?articleId=126960630#tslib_24)
  9. * [1. 获取 tslib](https://editor.csdn.net/md/?articleId=126960630#1__tslib_26)
  10. * [2. 编译 tslib](https://editor.csdn.net/md/?articleId=126960630#2__tslib_30)
  11. * [3. 生成 Makefile](https://editor.csdn.net/md/?articleId=126960630#3__Makefile_38)
  12. - [四、配置QT源码编译工具链与编译QT源码](https://editor.csdn.net/md/?articleId=126960630#QTQT_45)
  13. * [1. 修改qmak.conf](https://editor.csdn.net/md/?articleId=126960630#1_qmakconf_46)
  14. * [2.生成qmake编译文件](https://editor.csdn.net/md/?articleId=126960630#2qmake_52)
  15. - [五、编译QT源码](https://editor.csdn.net/md/?articleId=126960630#QT_140)

前言

为实现目标嵌入式平台能够正常运行Qt程序,则需要在目标平台上部署QT运行环境。本文参考08【正点原子】I.MX6U移植Qt5.12.9_V1.1.pdf ## 准备 1. Ubuntu系统,本文使用的是20.04版本 2. arm平台通用交叉编译工具链 3. QT源码

一、下载arm平台交叉编译工具链

1.下载工具链

点击链接https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabi/,选择下图中标识的文件进行下载。(一)搭建通用Arm平台的QT交叉编译环境 - 图1 ### 2.解压到交叉编译平台(Ubuntu) 通过共享文件夹或者FileZila将该压缩文件传输到Ubuntu,并解压。

3.配置环境变量

(1)编辑.bashrc文件
sudo vi ~/.bashrc
(2)添加路径
export PATH=/home/anmo/QtPorting/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin:$PATH
(一)搭建通用Arm平台的QT交叉编译环境 - 图2 ## 二、下载QT源码(版本与交叉编译工具链版本保持一致) 点击链接https://download.qt.io/archive/qt/5.12/5.12.9/single/,跳转到QT官网下载中心进行下载,本文以5.12.9版本的QT源码为例(如需要其他版本,点击”Parent Directory“返回上级目录自行选择)。
点击下载图中红色框框标识的压缩文件(注意可能由于平台差异,zip类型不适用于Ubuntu系统,所以请勿下载zip类型)。下载完毕之后可通过共享文件夹,或者FileZila将压缩包传输到Ubuntu。
(一)搭建通用Arm平台的QT交叉编译环境 - 图3 ## 三、下载并编译tslib库 该库为ArmQt的屏幕触摸库

1. 获取 tslib

获取tslib 的源码, git 地址为 https://github.com/kergoth/tslib 。 tslib 源码已经放到开发板光
盘中 路径为: 开发板光盘 A 基础资料 1 、例程源码 7 、第三方库源码 tslib 1.21.tar.bz2 。将压缩包发送到 Ubuntu 中并解压至Ubuntu 虚拟机目录下,将其解压。

2. 编译 tslib

编译 tslib生成Makefile ,还需要安装以下软件 。
  1. sudo apt get update
  2. sudo apt get install autoconf automake libtool
执行autogen.sh 生成 Makefile ,以编译源码。

3. 生成 Makefile

执行下面的指令,指令会检查编译器等是否会工作。 ,如下图。

ps:

-**-host ** 指定交叉编译器,32位为arm-linux-gnueabihf,64位为aarch64-linux-gnu

-prefix **指定tslib编译输出路径,路径修改为自己的实际路径即可,**arm-tslib无需手动创建

  1. ./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/用户名/tslib-master/arm-tslib

执行

  1. make
  2. make install

四、配置QT源码编译工具链与编译QT源码

1. 修改qmak.conf

在Ubuntu解压之后,进入qtbase/mkspecd/linux-arm-gnueabi-g++路径,并编辑qmake.conf
(一)搭建通用Arm平台的QT交叉编译环境 - 图4
更改编译工具链名称 32位**为arm-linux-gnueabihf,64位为aarch64-linux-gnu**
(一)搭建通用Arm平台的QT交叉编译环境 - 图5 ### 2.生成qmake编译文件 (1)在qt源码主目录下,新建配置脚本autoconfigure.sh,添加如下内容。 PS:注意修改以下三个地方 (1)QT源码编译完成的QT库

-prefix /home/用户名/qt-everywhere-src-5.12.9/arm-qt \

(2)目标平台

-xplatform linux-arm-gnueabi-g++ \ (目标机32位为linux-arm-gnueabi-g++,目标机64位为linux-arrch64-gnu-g++)

(3)之前所编译好的QT触摸库路径

-I/home/用户名/tslib-1.21/arm-tslib/include \

-L/home/用户名/tslib-1.21/arm-tslib/lib \

  1. ./configure -prefix /home/用户名/qt-everywhere-src-5.12.9/arm-qt \
  2. -opensource \
  3. -confirm-license \
  4. -release \
  5. -strip \
  6. -shared \
  7. -xplatform linux-arm-gnueabi-g++ \
  8. -optimized-qmake \
  9. -c++std c++11 \
  10. --rpath=no \
  11. -pch \
  12. -skip qt3d \
  13. -skip qtactiveqt \
  14. -skip qtandroidextras \
  15. -skip qtcanvas3d \
  16. -skip qtconnectivity \
  17. -skip qtdatavis3d \
  18. -skip qtdoc \
  19. -skip qtgamepad \
  20. -skip qtlocation \
  21. -skip qtmacextras \
  22. -skip qtnetworkauth \
  23. -skip qtpurchasing \
  24. -skip qtremoteobjects \
  25. -skip qtscript \
  26. -skip qtscxml \
  27. -skip qtsensors \
  28. -skip qtspeech \
  29. -skip qtsvg \
  30. -skip qttools \
  31. -skip qttranslations \
  32. -skip qtwayland \
  33. -skip qtwebengine \
  34. -skip qtwebview \
  35. -skip qtwinextras \
  36. -skip qtx11extras \
  37. -skip qtxmlpatterns \
  38. -make libs \
  39. -make examples \
  40. -nomake tools -nomake tests \
  41. -gui \
  42. -widgets \
  43. -dbus-runtime \
  44. --glib=no \
  45. --iconv=no \
  46. --pcre=qt \
  47. --zlib=qt \
  48. -no-openssl \
  49. --freetype=qt \
  50. --harfbuzz=qt \
  51. -no-opengl \
  52. -linuxfb \
  53. --xcb=no \
  54. -tslib \
  55. --libpng=qt \
  56. --libjpeg=qt \
  57. --sqlite=qt \
  58. -plugin-sql-sqlite \
  59. -I/home/用户名/tslib-1.21/arm-tslib/include \
  60. -L/home/用户名/tslib-1.21/arm-tslib/lib \
  61. -recheck-all
(2)添加权限
  1. sudo chmod 755 ./autoconfigure.sh
(3)执行./autoconfigure.sh 等待创建qmake
(一)搭建通用Arm平台的QT交叉编译环境 - 图6 (4)输入o,表示开源版本
(一)搭建通用Arm平台的QT交叉编译环境 - 图7 (5)输入y,接受许可
(一)搭建通用Arm平台的QT交叉编译环境 - 图8 (6)配置完成
(一)搭建通用Arm平台的QT交叉编译环境 - 图9 ## 五、编译QT源码 1. 执行time(make -j 16),进行编译,其中16一般为分配给虚拟机核心数的2倍
注意请关闭当前终端窗口,重新打开一个终端窗口,为了避免在当前使用了sudo或者root用户,而在编译时出现权限访问的问题,导致编译错误 2. 最后执行make install,会在qt源码主目录下生成编译后的arm-qt文件夹,该文件夹名称为autoconfigure.sh指定的文件夹名称一致

六、配置QT Creator

  1. 手动添加arm交叉编译工具链

(一)搭建通用Arm平台的QT交叉编译环境 - 图10

  1. 指定交叉编译工具链的路径

(一)搭建通用Arm平台的QT交叉编译环境 - 图11

  1. 配置Qt Versions

(一)搭建通用Arm平台的QT交叉编译环境 - 图12

  1. 配置kits

(一)搭建通用Arm平台的QT交叉编译环境 - 图13