在ARM64 linux平台运行QT程序

以qt5.12.9,单片机为I.MX8QM为例

首先准备交叉编译工具链,链接:Linaro Releases

 本文将工具链放在ubuntu的/opt/路径下

一、交叉编译QT库

1.下载Qt5.12.9源码,下载链接如下:

Index of /new_archive/qt/5.12/5.12.9/single

在Linux下编译一定要选择后缀名为.tar.xz的压缩包,解压缩

tar -xvf qt-everywhere-src-5.12.9.tar.xz

在ubuntu中解压源码,终端进入源码目录

 进入qtbase/mkspecs/目录

cd qtbase/mkspecs/

 复制linux-aarch64-gnu-g++文件夹为myaarch64,因为等会要修改内部文件,备份一下

cp -r linux-aarch64-gnu-g++ myaarch64

在备份文件夹中编辑qmake.conf

cd myaarch64
gedit qmake.conf

编辑内容如下,主要添加/修改了红框部分

#
# qmake configuration for building with aarch64-linux-gnu-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM=linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
QMAKE_CXX               = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK              = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objcopy
QMAKE_NM                = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm -P
QMAKE_STRIP             = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
load(qt_config)

 回到QT5.12.9源码最顶层目录,输入./configure -help命令,可以查看编译配置选项。在源码最顶层目录,新建文件myconfigure.sh,并添加内容。

-prefix指定编译输出的文件与库的路径

-xplatform指定我们之前修改的qmake.conf文件的目录名称

#! /bin/bash
./configure -prefix /home/fy/qt_aarch64 \
	-opensource -confirm-license \
	-release \
	-strip \
	-shared \
	-xplatform myaarch64 \
	-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 \
	--libpng=qt \
	--libjpeg=qt \
	--sqlite=qt \
	-plugin-sql-sqlite \
	-recheck-all

chmod +x myconfigure.sh给文件添加执行的权限,然后运行./myconfigure.sh,生成makefile文件

chmod +x myconfigure.sh
./myconfigure.sh

如果配置编译选项没有错误,运行了myconfigure.sh文件后没有错误就会出现类似下图的显示

 运行了myconfigure.sh文件后生成了Makefile,就可以执行make命令了

make -j$(nproc)

可能要等很久很久。。。。。。。。

编译结束类似下图

 make完成后就可以执行make install命令了

make install

结束后即可在指定目录-prefix /home/fy/qt_aarch64中看到生成的qt5.14.2文件了

至此交叉编译QT库完成

二、ubuntu中配置QT交叉编译器

在ubuntu安装qt5.12.9,安装流程类似如下:(63条消息) Ubuntu18.04 qt5.14安装_ubuntu18.04安装qt_筱莔梦的博客-CSDN博客

打开安装好的qt,点击工具-选项

添加Qt Versions,qmake路径即刚刚交叉编译生成目录的/home/fy/qt_aarch64/bin/qmake,添加完点一下应用

 添加g++与gcc 编译器,名字能区分就行随便给,编译器路径即交叉编译链中g++/gcc路径

/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

添加完点一下应用

 添加kits,名称随意能区分别的kits即可。Compiler选择刚刚添加的g++与gcc 编译器,Qt Version也选择刚刚添加的Qt Version

添加完点一下应用

 应用完即可点ok了

三、实机验证

进入IMX8QM开启一个SSH会话,这一步略。可以使用MobaXterm等软件,相信你玩嵌入式linux这里不会有问题

把之前交叉编译好的qt文件/home/fy/qt_aarch64发送到IMX8QM中

 好,接下来在ubuntu中打开qt,新建一个工程,这个参考

(64条消息) Ubuntu18.04 qt5.14安装_ubuntu18.04安装qt_筱莔梦的博客-CSDN博客

我们加一行打印

 注意选择编译器

然后只编译(ctrl+B),不执行,因为程序不能在ubuntu运行

找到生成的可执行程序,把它发送到IMX8QM中

 

 运行之前由于要加载qt环境,所以这里写一个qt.sh,内容如下,路径按实际的给

其中,$QT_ROOT/lib/fonts文件夹下放字体,通常可以在电脑的C:\Windows\Fonts中复制字体到这个文件夹

#!/bin/bash
export QT_ROOT=/home/root/qtws/qt_aarch64
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export QML2_IMPORT_PATH=$QT_ROOT/qml
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_FB_TSLIB=1
export QT_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms

export LD_LIBRARY_PATH=$QT_LIBRARY_PATH
chmod +x untitled
./untitled

#export FFMPEG_LIBRARY_PATH=/home/root/qtws/ffmpeg5.0.1_gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/lib
#export LD_LIBRARY_PATH=$QT_LIBRARY_PATH:$FFMPEG_LIBRARY_PATH
#chmod +x fydlw2
#./fydlw2

 写好后给sh执行权限

chmod +x qt.sh

运行qt.sh

./qt.sh

 看到能正常运行,ok,over

后续添加

1.在make install时出现Project ERROR: Unknown module(s) in QT: openglextensions

方法:在上述新建的文件myconfigure.sh中,添加

-skip qtquick3d

参考链接

(63条消息) Qt5.12.11交叉编译+64位ARM_aarch64+全志H5 CortexA53_交叉编译 arm aarch64_Crude2013的博客-CSDN博客(63条消息) 自动驾驶开发入门(一)---交叉编译64位Qt5.15 (aarch64)_qt5.15 交叉编译_奔跑吧猴哥的博客-CSDN博客

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
移植Qt MQTT 到 ARM Linux 平台上需要以下几个步骤: 1. 安装交叉编译工具链:在Linux下,我们需要安装适用于ARM架构的交叉编译工具链,例如arm-linux-gnueabihf。这个工具链将会提供编译Qt和其它依赖库所需的工具和环境。 2. 下载Qt源码:从Qt官方网站上下载适用于ARM LinuxQt源码。选择适合您的版本和需要的模块。确保选择支持MQTT的模块。 3. 配置编译选项:解压源码后,使用命令行进入源码目录。运行`configure`脚本来配置编译选项,例如指定交叉编译工具链和目标平台。确保选择MQTT模块和适当的依赖库,在这种情况下是Paho MQTT C库和OpenSSL库。 4. 运行make:在配置完成后,运行`make`命令来编译Qt源码。这个过程可能会需要一段时间,具体取决于您的电脑性能和源码大小。 5. 安装Qt:编译完成后,使用`make install`命令来安装Qt到指定的路径。确保您选择正确的安装路径,以便在ARM Linux上使用。 6. 创建Qt MQTT项目:现在,您可以在ARM Linux上创建基于Qt MQTT的项目了。使用Qt Creator工具创建一个新项目,并在项目配置中添加必要的库和模块。确保设置正确的编译器和目标平台。 7. 编译和部署:通过Qt Creator编译和构建项目。然后,将生成的可执行文件和任何依赖的库文件复制到ARM Linux设备上。确保正确配置和安装依赖库,包括Paho MQTT C库和OpenSSL库。 8. 测试和调试:最后,在ARM Linux设备上运行和测试您的Qt MQTT应用程序。使用调试工具(例如GDB)来调试任何可能出现的问题,确保应用程序正常运行。 通过以上步骤,您应该能够成功将Qt MQTT移植到ARM Linux平台上,并在设备上运行和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值