以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博客

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐