在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博客
更多推荐
所有评论(0)