在开发板中运行QT程序的基本条件是具备QT环境,那么QT的移植尤为重要,接下载我将和小伙伴们一起学习QT的移植。
一、准备材料
- tslib源码
- qt-everywhere-src-5.12.9.tar.xz源码
- arm开发版
二、获取安装包
- tslib源码的git获取地址是:https://github.com/libts/tslib。
- qt-everywhere-src-5.12.9.tar.xz源码的获取地址是:https://download.qt.io/archive/qt/5.12/5.12.9/single/。
三、编译tslib
由于QT触摸需要相应的触摸插件,而嵌入式QT一般使用的都是tslib库,所以在编译QT之前需要将tslib库编译一下,在编译QT时需要用到。
- 将tslib源码拷贝至虚拟下进行解压
| tar vxf tslib-1.21.tar.bz2 |
| cd tslib-1.21 |
- 安装所需软件以免编译时出现错误
| sudo apt-get update |
| sudo apt-get install autoconf automake libtool |
- 生成Makefile
- 配置安装路径
| ./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/tslib-1.21/arm-tslib |
编译并安装
四、编译QT
- qt-everywhere-src-5.12.9.tar.xz源码拷贝至虚拟机并解压
| tar vxf qt-everywhere-src-5.12.9.tar.xz |
| cd qt-everywhere-src-5.12.9 |
- 修改 qmake.conf文件
| vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf |
修改内容如下:
| |
| |
| |
| |
| MAKEFILE_GENERATOR = UNIX |
| CONFIG += incremental |
| QMAKE_INCREMENTAL_STYLE = sublib |
| |
| QT_QPA_DEFAULT_PLATFORM = linuxfb |
| QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard |
| QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard |
| |
| include(../common/linux.conf) |
| include(../common/gcc-base-unix.conf) |
| include(../common/g++-unix.conf) |
| |
| |
| QMAKE_CC = arm-linux-gnueabihf-gcc |
| QMAKE_CXX = arm-linux-gnueabihf-g++ |
| QMAKE_LINK = arm-linux-gnueabihf-g++ |
| QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++ |
| |
| |
| QMAKE_AR = arm-linux-gnueabihf-ar cqs |
| QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy |
| QMAKE_NM = arm-linux-gnueabihf-nm -P |
| QMAKE_STRIP = arm-linux-gnueabihf-strip |
| load(qt_config) |
| |

- 配置编译选项
可以通过./configure -help
查看可配置的选项,由于需要配置的选项比较多,所以新建一个脚本存放配置选项。
文件中的配置内如如下所示:
| ./configure -prefix /home/linux/tool/qt-everywhere-src-5.12.9/arm-qt \ |
| -opensource \ |
| -confirm-license \ |
| -release \ |
| -strip \ |
| -shared \ |
| -xplatform linux-arm-gnueabi-g++ \ |
| -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 \ |
| -tslib \ |
| --libpng=qt \ |
| --libjpeg=qt \ |
| --sqlite=qt \ |
| -plugin-sql-sqlite \ |
| -I/home/tslib-1.21/arm-tslib/include \ |
| -L/home/tslib-1.21/arm-tslib/lib \ |
| -recheck-all |
| |
注意:./configure -prefix /home/linux/tool/qt-everywhere-src-5.12.9/arm-qt 是个人的QT安装路径
-I/home/tslib-1.21/arm-tslib/include \ 是个人的tslib安装路径
- 更改脚本执行权限并执行文件
| chmod +x autoconfigure.sh |
| ./autoconfigure.sh |
- 开始编译并安装
五、移植tslib和QT到开发版
- 将编译生成的arm-tslib文件拷贝到开发版的'/usr/local',路径下并配置环境变量
| export TSLIB_ROOT=/usr/local/arm-tslib |
| export TSLIB_CONSOLEDEVICE=none |
| export TSLIB_FBDEVICE=/dev/fb0 |
| export TSLIB_TSDEVICE=/dev/input/event1 |
| export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf |
| export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts |
| export TSLIB_CALIBFILE=/etc/pointercal |
| export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so |
- 将编译生成的arm-qt文件拷贝到开发版的'/usr/local',路径下并配置环境变量
| export QT_ROOT=/usr/local/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 |
| |
- 使能环境变量
- 运行qt的测试案例
| /usr/lib/arm-qt/examples/widgets/animation/animatedtiles/animatedtiles |
自己测试的效果如下图示

问题
此方法是适用于制作生成的根文件系统,如果是标准的ubuntu系统时,无需对QT进行移植,因为在ubuntu系统中自带QT的运行环境,直接ubuntu根文件系统的小伙伴可以在路径中'/usr/lib/arm-linux-gnueabihf'查看QT库是否存在。

在路径'/usr/lib/arm-linux-gnueabihf/qt5'中可以看到相关文件

参考文献
tslib移植arm及使用:https://www.cnblogs.com/silencehuan/p/11207996.html
QT5.9移植:https://www.jianshu.com/p/de6b0bc7893c
正点原子的《I.MX6U移植 Qt5.12.9 V1.1》简称手册
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)