首页 > 运维 > linux运维 > 正文

QT5.6移植到ARM三星4412-

雪夜
发布: 2025-07-20 12:38:32
原创
741人浏览过

嵌入式linux之qt5.6移植指南

1.1 简介

本文旨在详细介绍如何在嵌入式Linux环境中移植QT5.6。QT是一个跨平台的C++图形用户界面应用程序框架,提供了开发者所需的功能来构建图形用户界面,广泛应用于GUI程序和非GUI程序的开发。QT采用完全面向对象的设计,易于扩展,并支持组件编程。此外,QT还支持多种平台,提供丰富的API,支持2D/3D图形渲染、OpenGL、丰富的开发文档和XML等功能。

在2015年世界峰会上,QT公司宣布QT5.6将成为QT5系列的长期支持版本。自QT5.0发布以来,经过三年的发展和优化,QT5.6作为一款成熟的版本发布,承诺提供三年的技术支持,并通过购买可延长支持服务。QT5.6兼容新版本的同步更新、漏洞修复和安全升级,同时支持新的操作系统和编译器。

QT5.6的新特性包括:

  • 新持续集成系统:通过反复测试各平台和配置,确保发布版本的稳定性,节省系统和CPU时间。
  • 高分辨率支持:使应用自动适应高清显示,并通过字体、图标和图片的调整实现不同显示设备间的像素配置转换。
  • 全面支持Windows10:进一步支持Win32和WinRT API,使所有QT应用可以在台式机、平板电脑和Windows Phone上通过Windows商店发布和获取。对于32位系统应用,只需简单重新编译即可兼容Win10和WinRT。QT5.6还为MS Visual Studio2015提供了预设文件库,并更新了VS插件。

1.2 移植

1.2.1 源码下载链接

从QT官方网站下载QT5.6源码,链接为:https://www.php.cn/link/1c7640494d7b763e2f1521e08075cf61

QT5.6移植到ARM三星4412-图1-1 最新版本5.6

QT5.6移植到ARM三星4412-图1-2 选择单一的压缩包

QT5.6移植到ARM三星4412-图1-3 选择linux格式的压缩包下载

1.2.2 移植准备工作

在移植QT之前,需要确保以下准备工作已完成:

  1. 提前移植好交叉编译器,低版本的编译器可能会导致QT编译错误
  2. 移植tslib库。tslib是一个用于电阻式触摸屏校准的开源软件库,为触摸屏驱动提供滤波、去抖、校准等功能,QT依赖tslib来获取屏幕坐标。

1.2.3 解压QT源码包

[root@xiaolong qt5.6]# tar xvf qt-everywhere-opensource-src-5.6.0
[root@xiaolong qt5.6]# cd qt-everywhere-opensource-src-5.6.0
登录后复制

1.2.4 配置编译环境

编辑qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf文件,内容如下:

## qmake configuration for building with arm-linux-gnueabi-g++
MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linuxfb #eglfs
QMAKE_CFLAGS_RELEASE   += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
<h1>modifications to g++.conf</h1><p>QMAKE_CC                = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc
QMAKE_CXX               = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK              = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++</p><h1>modifications to linux.conf</h1><p>QMAKE_AR                = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-objcopy
QMAKE_NM                = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-nm -P
QMAKE_STRIP             = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-strip
load(qt_config)
登录后复制

注意:蓝色部分需要根据实际情况修改。

修改说明:

  • QT_QPA_DEFAULT_PLATFORM选项指定图形插件,QT5将各平台底层抽象为qpa插件,常见的选项包括cocoa(mac)、windows(Windows)、xcb(Linux X11),如果支持OPENGL,可以选择eglfs。对于无硬件加速的设备,选择linuxfb。
  • armv7-a是当前CPU的架构,需要根据实际CPU架构填写。

通过交叉编译器查看当前处理器架构:

[root@xiaolong qt-everywhere-opensource-src-5.6.0]# arm-none-linux-gnueabi-gcc --target-help
登录后复制
  • /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/是交叉编译器的路径,需要根据实际路径填写。

1.2.5 删除目录

[root@xiaolong qt-everywhere-opensource-src-5.6.0]# rm qt3d qtcanvas3d qtweb* -fr
登录后复制

如果未删除这些目录,编译时可能会出现错误。

QT5.6移植到ARM三星4412-图1-5错误信息

1.2.6 生成Makefile

[root@xiaolong qt-everywhere-opensource-src-5.6.0]# ./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -no-c++11 -no-opengl -no-dbus
登录后复制

说明:

  • $PWD/tmp是配置安装的路径。

查看配置帮助信息:

[root@xiaolong qt-everywhere-opensource-src-5.6.0]# ./configure -help
登录后复制

1.2.7 编译安装

[root@xiaolong qt-everywhere-opensource-src-5.6.0]# make && make install
登录后复制

编译过程可能需要1到3个小时。

QT5.6移植到ARM三星4412-图1-6 编译成功

1.2.8 编译成功

编译成功后,生成的文件如下:

[root@xiaolong tmp]# ls
bin  doc  examples  include  lib  mkspecs  plugins  qml  translations
登录后复制

bin目录下存放了qmake命令。

1.2.9 添加环境变量

为了方便使用qmake命令,将bin目录添加到系统环境变量PATH中。

[root@xiaolong bin]# pwd
/work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/bin
[root@xiaolong bin]# gedit /etc/profile
登录后复制

QT5.6移植到ARM三星4412-图1-7 添加环境变量

使修改的/etc/profile文件立即生效:

[root@xiaolong bin]# source /etc/profile
登录后复制

1.2.10 查看qmake版本

[root@xiaolong /]# qmake -v
QMake version 3.0
Using Qt version 5.6.0 in /work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/lib
登录后复制

1.2.11 编译ARM版的QT程序

① 创建一个完整的QT工程。

[root@xiaolong window_1]# ls
main.cpp        mainwindow.h    win_1.h   window_1   mainwindow.cpp  mainwindow.ui  win_1.cpp  win_1.ui  window_1.pro
登录后复制

② 使用qmake命令构建Makefile。

[root@xiaolong window_1]# qmake
[root@xiaolong window_1]# ls
main.cpp        mainwindow.h   Makefile   win_1.h   window_1      window_1.pro.user
mainwindow.cpp  mainwindow.ui  win_1.cpp  win_1.ui  window_1.pro
登录后复制

③ 编译程序。

[root@xiaolong window_1]# make
[root@xiaolong window_1]# ls
main.cpp        mainwindow.h   Makefile   moc_win_1.cpp    ui_win_1.h  win_1.o   window_1.pro
main.o          mainwindow.o   moc_mainwindow.cpp  moc_win_1.o      win_1.cpp   win_1.ui
mainwindow.cpp  mainwindow.ui  moc_mainwindow.o    ui_mainwindow.h  win_1.h     window_1
登录后复制

window_1是编译生成的可执行程序,可以直接拷贝到开发板运行。

示例: ./window_1
登录后复制

1.3 部署开发板运行环境

1.3.1 拷贝QT运行库

创建一个名为qt5.6_lib的文件夹,用来存放相关的代码。将QT编译生成的lib目录和plugins目录拷贝到qt5.6_lib目录下,然后将qt5.6_lib目录拷贝到开发板根文件系统待用。

阶跃星辰开放平台
阶跃星辰开放平台

阶跃星辰旗下开放平台,提供文本大模型、多模态大模型、繁星计划

阶跃星辰开放平台 0
查看详情 阶跃星辰开放平台

操作步骤如下:

① [root@xiaolong window_1]# cd /work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/
② [root@xiaolong tmp]# ls
bin  doc  examples  include  lib  mkspecs  plugins  qml  translations
③ [root@xiaolong tmp]# mkdir qt5.6_lib
④ [root@xiaolong tmp]# cp lib plugins qt5.6_lib/ -rfd
⑤ [root@xiaolong tmp]# cd qt5.6_lib/
⑥ [root@xiaolong qt5.6_lib]# ls
lib  plugins
登录后复制

1.3.2 libiconv库下载

QT程序运行时需要依赖libiconv库。

更新libiconv库,到iconv官网下载最新版本的库源码包,下载地址为:https://www.php.cn/link/b8727981b7f3d46b51d5b6770632e453

编译步骤:

libiconv目录下:

./configure --prefix=$PWD/temp --host=arm-linux
$make
$make install
登录后复制

上述命令执行完成后会在libiconv目录下生成新的temp目录,该目录下存在4个目录分别是:

bin  include  lib  share
登录后复制

lib目录下为生成的库文件,其中一个为preloadable_libiconv.so,将其下载到开发板的lib目录下,然后设置开发板的系统环境变量:

$ export LD_PRELOAD=/lib/preloadable_libiconv.so
登录后复制

1.3.3 创建相关配置文件

① 在/qt5.6_lib下创建一个配置文件(qt5.6_path.config),用来存放QT相关的环境变量设置。

内容如下:

#QT相关的路径
export QTDIR=/qt5.6_lib</p><h1>设置共享库路径</h1><p>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib</p><h1>键盘</h1><p>export QT_QPA_ENABLE_TERMINAL_KEYBOARD=/dev/input/event1</p><h1>鼠标节点</h1><p>export QT_QPA_FB_HIDECURSOR=/dev/input/event4</p><h1>触摸屏的节点</h1><p>export QT_QPA_FB_TSLIB=/dev/input/event2</p><h1>字体库目录</h1><p>export QT_QPA_FONTDIR=$QTDIR/lib/fonts</p><h1>图形插件平台</h1><p>export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0</p><h1>平台插件</h1><p>export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins</p><p>export LD_PRELOAD=$QTDIR/lib/preloadable_libiconv.so
登录后复制

② 创建一个qt5.6_config.sh脚本文件,用来开机自动加载QT的配置。该脚本只是用来方便移植使用,只需在移植时执行一次,以后无需再执行。

内容如下:

#!/bin/bash
grep -q "source /qt5.6_lib/qt5.6_path.config" ../etc/profile||echo "source /qt5.6_lib/qt5.6_path.config">>../etc/profile
登录后复制

1.3.4 拷贝QT依赖库

QT运行时需要用到libjpeg.so.8libpng14.so.14等一系列库。这些库在交叉编译器目录下已经编译好,直接拷贝到开发板的lib目录下即可。

库存放的路径:

/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib
登录后复制

拷贝示例:

[root@xiaolong lib]# pwd
/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib
[root@xiaolong lib]# cp ./* /work/rootfs/lib/ -fd
登录后复制

1.3.5 QT中文支持

QT的字体目录与PC机上的QT源码编译安装目录有关。

例如,在PC端编译安装QT源码的目录如下:

/work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/
登录后复制

那么QT字体的目录就是:

/work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/lib/fonts
登录后复制

如果想让QT显示中文,可以将Windows下的中文字体拷贝到QT的字体库目录下。

QT5.6移植到ARM三星4412-图1-9 运行效果图

QT5.6移植到ARM三星4412-图1-10 运行效果图

1.3.7 鼠标设置方法

如果不想使用触摸屏,可以直接使用USB鼠标代替。

环境变量配置如下:

#QT相关的路径
export QTDIR=/qt5.6_lib</p><h1>设置共享库路径</h1><p>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib</p><h1>键盘</h1><p>export QT_QPA_ENABLE_TERMINAL_KEYBOARD=/dev/input/event1</p><h1>鼠标节点</h1><p>export QT_QPA_FB_HIDECURSOR=/dev/input/event4</p><h1>触摸屏的节点</h1><p>export QT_QPA_FB_TSLIB=/dev/input/event2</p><h1>字体库目录</h1><p>export QT_QPA_FONTDIR=$QTDIR/lib/fonts</p><h1>图形插件平台</h1><p>export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0</p><h1>平台插件</h1><p>export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins</p><p>export LD_PRELOAD=$QTDIR/lib/preloadable_libiconv.so
登录后复制

以上就是QT5.6移植到ARM三星4412-的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号