Ubuntu18.04交叉编译QT程序在树莓派上运行

1 篇文章 0 订阅

在Qt上写了一个程序使用Qt的MQTT模块,实现图形化实时显示温度,并提供UI接口更改网络设置。程序的目标平台是树莓派,所以需要用到交叉编译。
本篇文章将介绍如何在虚拟机Ubuntu18.04环境下交叉编译Qt程序

一、下载交叉编译器

这里直接使用apt-get install安装交叉编译工具链,免去了对交叉编译工具链的一些环境配置

执行命令sudo apt-get install gcc-arm-linux-gnueabihf安装gcc交叉编译套件
执行命令sudo apt-get install g++-arm-linux-gnueabihf安装g++交叉编译套件

执行arm-linux-gnueabihf-gcc -v可以看到gcc交叉编译器的版本信息,说明安装成功。
在这里插入图片描述

执行arm-linux-gnueabihf-g++ -v可以看到版本信息,说明安装成功。
在这里插入图片描述

二、交叉编译Qt源码

1)下载Qt源码

Qt官方下载地址:https://download.qt.io/archive/qt/

找到你需要的版本,点进去,源码在single文件夹下。
因为我准备交叉编译的程序就是用Qt5.12.9写的,所以我这里也下载Qt5.12.9的源码。
在这里插入图片描述

2)修改源码配置文件

执行tar -xvJf qt-everywhere-src-5.12.9.tar.xz解压

进入qt-everywhere-src-5.12.9/qtbase/mkspecs修改linux-arm-gnueabi-g++的qmake的配置文件
在这里插入图片描述在这里插入图片描述
更改前的qmake.conf文件
在这里插入图片描述
指定交叉编译套件,更改后的qmake.conf文件
在这里插入图片描述在这里插入图片描述

3)编译Qt源码

到qt-everywhere-src-5.12.9文件夹执行下面的命令,命令有点长,写了一个脚本build.sh来执行。chmod a+x build.sh然后./buildsh

#!/bin/bash

PRJ_PATH=`pwd`
LIBS_PATH=$PRJ_PATH/install
QT_INST_PATH=/opt/qt5.12.9.rpi

./configure -prefix ${QT_INST_PATH} \
	-opensource \
	-confirm-license \
	-shared \
	-strip \
	-xplatform linux-arm-gnueabi-g++ \
	-make libs \
	-no-opengl \
	-no-cups \
	-no-libproxy \
	-no-avx \
	-no-mtdev \
	-no-rpath \
	-no-glib \
	-no-xcb \
	-pch \
	-qt-freetype \
	-qt-zlib \
	-qt-libpng \
	-qt-libjpeg \
	-linuxfb \
	-qpa linuxfb \
	-I${LIBS_PATH}/include/ \
	-L${LIBS_PATH}/lib/ \
	-I${QT_INST_PATH}/include/ \
	-L${QT_INST_PATH}/lib/
	

配置成功后执行make -j8编译Qt库,时间很久,漫长的等待…
在这里插入图片描述

编译完成后执行make install安装Qt,就完成了Qt源码编译。

三、使用qmake交叉编译项目文件

由于我们的项目需要用到MQTT模块,所以先用上一步编译生成的qmake编译git上下载的MQTT模块:qtmqtt.pro文件。
pro文件用来告诉qmake如何生成该项目的Makefile。如该项目有哪些源文件和头文件,该程序的特殊配置,比如需要链接的额外的库,或者一个额外的包含路径,这些都在pro文件中。
在这里插入图片描述
qmake后生成了Makefile文件,执行make
在这里插入图片描述报错找不到头文件,这是因为我们刚才交叉编译的qt的include文件夹中没有相关的头文件。解决办法是将下载的模块src文件中的头文件全部拷贝到交叉编译的qt中

先在include中创建一个QtMqtt的文件夹,并将.h文件都拷贝进去,然后将QtMqtt移到qt的include中
在这里插入图片描述
在这里插入图片描述
再来make,这次mqtt模块编译成功,生成了我们需要的库和模块文件
在这里插入图片描述
将源码编译生成的文件加入到qt的安装路径对应的文件中,不然我们的项目qmake时会报错Unknown module(s) in QT: mqtt找不到MQTT模块

将生成的6个文件拷贝到qt的lib中
在这里插入图片描述
在这里插入图片描述
再将生成的.pri拷贝到qt的mkspecs/modules中
在这里插入图片描述
现在来编译我们的项目,同样是先qmake生成makefile,再make编译项目
在这里插入图片描述
在这里插入图片描述

自此,在虚拟机Ubuntu18.04上交叉编译树莓派项目成功!

下一篇:Qt交叉编译的程序打包到树莓派上运行

Qt是一种广泛使用的跨平台应用程序框架。本文将介绍如何在Ubuntu 18.04上交叉编译Qt 5.12.7的详细教程。 第一步是安装必要的依赖项。打开终端并输入以下命令: sudo apt-get update sudo apt-get install build-essential perl python git p7zip-full 接下来,你需要安装交叉编译工具链。在此示例中,我们将以ARM Cortex-A7为目标平台。 sudo apt-get install g++-arm-linux-gnueabihf libc6-armhf-cross-armel-cross binutils-arm-linux-gnueabihf 然后,创建一个新的目录并切换到该目录中,然后从Qt官方网站上下载最新的Qt源代码: mkdir qt-cross-compile && cd qt-cross-compile wget https://download.qt.io/archive/qt/5.12/5.12.7/single/qt-everywhere-src-5.12.7.tar.xz tar xvf qt-everywhere-src-5.12.7.tar.xz 接下来,创建一个称为“qt5-armhf.conf”的新文件,需要根据目标平台进行相应的更改: cd qt-everywhere-src-5.12.7/qtbase/mkspecs cp -r linux-arm-gnueabi-g++/ qt5-armhf cd qt5-armhf vi qmake.conf 确保以下行已正确配置: 将“QMAKE_CFLAGS”和“QMAKE_CXXFLAGS”修改为: QMAKE_CFLAGS = -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard --sysroot=/usr/arm-linux-gnueabihf/ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS 对于“QMAKE_LINK”和“QMAKE_LINK_SHLIB”,添加以下行: QMAKE_LINK = arm-linux-gnueabihf-g++ QMAKE_LINK_SHLIB = $$QMAKE_LINK 接下来,进入Qt源代码目录并构建一个交叉编译版本: cd ../../.. ./configure -prefix /opt/qt5-armhf -static -opensource -confirm-license -release -skip webengine -skip wayland -skip qtgamepad make -j4 接下来,安装Qt到目标目录: sudo make install 完成后,你可以在目标文件夹/opt/qt5-armhf找到已安装的Qt库。现在你可以使用Qt Creator或手动创建项目并在Ubuntu 18.04中进行交叉编译
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值