首页 > 系统相关 >linux下将QT移植至arm环境

linux下将QT移植至arm环境

时间:2023-10-06 21:56:49浏览次数:48  
标签:qt 源码 linux tslib arm QT

原文:https://blog.csdn.net/lhh2333/article/details/128836570

前言
讲下整个项目流程,我们的目标是把qt编出来程序放在arm开发板上面跑,首先下载QT源码和tslib源码(QT源码编译和QT程序运行需要tslib库的支持),在虚拟机里使用交叉编译将QT源码编译安装,会生成arm环境的库文件和qmake,然后在虚拟机里安装qt的Linux版本,安装好后配置qt的编译环境,将编译器改成交叉编译器,添加arm环境的qmake即可。接下来随便建个qt工程,用arm编译环境编出程序,将程序放入arm开发板,这个时候还不能运行,需要将前面编译出来的qt和tslib的库文件也放到开发板,最后设置好环境变量,做完触控校准就可以运行qt程序了。

源码下载
QT源码和QT软件下载
Index of /archive/qt

选择好适当的版本,点进去,其中single文件下是QT源码,我这里使用的是版本是QT5.9.6

 

如果不太清楚如何在虚拟机安装QT可参考我的这篇文章

linux环境下安装QT超详细_linux qt_yuansec的博客-CSDN博客

tslib源码下载
https://gitlab.com/tslib/tslib/-/archive/1.4/tslib-1.4.tar.gz

这里使用的是1.4版本

如果不想编译源码,我将已经编好了的tslib源码和qt源码的库文件放在了我的gitee,可直接下载使用

qt移植arm: linux下qt搭建交叉编译环境,且在arm环境运行程序 (gitee.com)

交叉编译器下载
我使用的交叉编译器是arm-none-linux-gnueabi-gcc,使用的是linux 解压版2014.05-29版本

【ARM-Linux开发】arm-none-Linux-gnueabi-gcc下载安装 - ZhangPYi - 博客园 (cnblogs.com)

不会安装的可以参考我的这篇文章

ubuntu安装交叉编译器arm-linux-gcc_yuansec的博客-CSDN博客_arm gcc4.6.4

源码编译
这里就不讲tslib的编译了,这个比较简单,你可以直接用我编译好的,也没有影响(不过要确保交叉编译器一致的情况下才能使用,我用的arm-none-linux-gnueabi-gcc)

重点讲一下qt源码的编译,在根目录下创建一个文件夹 /opt,将下好的qt源码包复制到这个目录下解压出来,为什么不能直接放桌面呢,因为qt源码所在目录不能包含中文,当然如果你的桌面不包含中文,那就可以放桌面编译

 

接着进入解压出来的源码目录,找到qtbase/mkspecs/目录下的linux-arm-gnueabi-g++文件夹

 

将其复制一份,命名为arm-none-linux-gnueabi-g++(你所使用的交叉编译器)

sudo cp -r linux-arm-gnueabi-g++ arm-none-linux-gnueabi-g++
进入复制出来的的这个文件夹,找到qmake.conf这个文件夹,使用记事本打开,检查一下里面所用的编译器是不是变成了和你使用的交叉编译器一致

 

做完后就可以进行裁剪了

在这之前先在/opt目录下建一个文件夹qt5(编译后生成库的文件目录)

再将tslib的库文件也放到/opt目录下

然后在源码根目录下建一个脚本auto.sh,添加以下代码

#!/bin/sh
./configure \
-v \
-prefix /opt/qt5 \ //生成路径
-release \
-opensource \
-no-accessibility \
-make libs \
-xplatform arm-none-linux-gnueabi-g++ \ //你的编译器
-optimized-qmake \
-pch \
-qt-zlib \
-tslib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-I/opt/tslib1.4/include -L/opt/tslib1.4/lib //tslib的库
接下来直接执行脚本,进行裁剪

./auto.sh
接下来就是编译,安装

make -j4
sudo make install
完成后会在之前建的qt5文件夹里生成所需的文件

 

其中bin目录下就有我们所需要的qmake文件

 

将lib和plugins两个文件夹直接打包拿出来备用,一定要打包,因为lib下的库文件是有链接属性的,如果直接复制出来会使其链接属性丢失

这个时候打开qt软件,依次打开工具——选项——构建和运行

首先设置编译器,添加一个C++编译器,如下图所示

 

接着手动添加一个版本,qmake就是刚刚编译出来的。

 

最后在构建套件下将我们设置好的编译器和版本添加进来

 

完成后qt的arm编译环境就算是搭好了,接下来随便放置一两个元件,编译后拿出来准备放到arm开发板上运行。

arm环境搭建
在你的arm开发板中建一个目录,/usr/local,其中再建两个文件夹qt、tslib,将之前压缩好的lib和plugins文件放到qt目录下解压,tslib也是同理

 

接着打开arm开发板的/etc/profile文件,添加以下内容

export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
export TS_ROOT=/usr/local/tslib //放入的tslib目录
export LD_LIBRARY_PATH=$TS_ROOT/lib:$LD_LIBRARY_PATH
export PATH=$TS_ROOT/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=$TS_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TS_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TS_ROOT/lib/ts
# qt
export QT_ROOT=/usr/local/qt //放入的qt目录
export LD_LIBRARY_PATH=$QT_ROOT/lib/:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:inverty
export QT_QPA_FB_TSLIB=1
export LD_PRELOAD=$TS_ROOT/lib/libts.so

添加完设置环境变量

source /etc/profile
这个时候程序还不能跑起来,初次需要做触控校准设置,执行tslib/bi目录下的ts_calibrate程序

./usr/local/tslib/bin/ts_calibrate
完成触控校准后,就可以将你编好的qt程序放到arm开发板里执行了(注意别忘了赋权限,不然程序没有权限执行不了)。


————————————————
版权声明:本文为CSDN博主「yuansec」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lhh2333/article/details/128836570

标签:qt,源码,linux,tslib,arm,QT
From: https://www.cnblogs.com/bruce1992/p/17745124.html

相关文章

  • Linux------驱动
    NTntddk.hWDMUBOOTWinCEIRQLPICAPICA8259a主板8259a从板16IRQ中断int1Dispath_lebelapc_levelPASS_levelirql中断请求等级例程==一次任务主要看结构体dt_KPCRgetCurrentRQL0线程切换内核开发文档分页内存非分页内存新的内核和旧的内核有什么区别设......
  • RK3588开发笔记(一):基于方案商提供的宿主机交叉编译Qt5.12.10
    前言  rk3588开发车机,方案上提供的宿主机只是编译rksdk的版本,并未编译好Qt,那么需要自行交叉编译Qt系统。选择的Qt的版本为5.12.10。 宿主机准备  下载并打开宿主机,只有sdk,并没有交叉编译的Qt。   Qt准备  下载Qt5.12.10的开源软件(方案商提供)。  ......
  • linux02
    linux实战安装集群 hostnamectl 修改主机名  安装ifconfig ......
  • linux 中条件判断关键字 -s 、 -z 和 -n
     001、-sfile:文件存在而且文件不为空,则为真,否则为假(base)[root@pc1test01]#lsa.txtb.txt(base)[root@pc1test01]#ll-h##两个侧式文件,a.txt不为空,b.txt则为空total4.0K-rw-r--r--.1rootroot10Oct619:40a.txt-rw-r--r--.1rootroot0Oct6......
  • STM32之使用MQTT连接阿里云物联网平台
    MQTT阿里云学习资料:PahomqttC语言库介绍MQTT介绍MQTT(MessageQueuingTelemetryTransport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高......
  • 软件设计开发笔记6:基于QT的Modbus RTU从站
      Modbus是一种常见的工业系统通讯协议。在我们的设计开发工作中经常使用到它。作为一种主从协议,在上一篇我们实现了MobusRTU主站工具,接下来这一篇中我们将简单实现一个基于QT的MobusRTU从站工具。1、概述  ModbusRTU从站应用很常见,有一些是通用的,有一些是专用的。而这里......
  • Linux 内核 --- 为什么在中断里不能 sleep
    明确问题首先,让我们明确一下问题。对于这个问题,稍微准确一点的问法是:为什么在Linux的中断里,不能sleep?但是这个问法仍然不准确。中断(interrupt)和中断服务程序(interruptserviceroutine,ISR,或者是interrupthandler),是2个不同的概念。前者是硬件相关的概念,后者是......
  • nodejs在linux下配置环境变量安装指南
    编辑环境变量#vim/etc/profile1.按i建进入插入编辑状态2.在文件最后加上两行:exportNODEJS_HOME=/usr/local/nodejs/node-v16.16.0-linux-x64exportPATH=$NODEJS_HOME/bin:$PATH3.按Esc退出编辑模式4.按:wq!退出并保存文件5.用下面命令刷新环境变量#......
  • Qto_ReinforcingElementBaseQuantities
    Qto_ReinforcingElementBaseQuantities箍筋数量   NameTypeDescriptionCountQ_COUNT LengthQ_LENGTH WeightQ_WEIGHT    ############################......
  • [Qt] vs 2022写qt解决"常量中有换行符"编译报错问题!
     像上面这种问题是由于文件的编码格式是中文(GB2312)格式,导致编译报错。在VS中,改成UTF-8就能解决。 1.点击VS菜单栏的高级编译选项低版本的在"文件"菜单选项下面,VS2022需要自己手动开启显示(1)工具->自定义选择工具,选中菜单栏添加命令类别选择"文件",命令找......