前言
讲下整个项目流程,我们的目标是把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开发板里执行了(注意别忘了赋权限,不然程序没有权限执行不了)。文章来源:https://www.toymoban.com/news/detail-401418.html
文章来源地址https://www.toymoban.com/news/detail-401418.html
到了这里,关于linux下将QT移植至arm环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!