Qt5.15.2 Linux ARM架构源码编译安装(UOS20国产系统)

本文档详细记录了在华为鲲鹏920处理器上运行的UOS20系统中,从源码编译安装Qt5.15.2的过程。由于官方提供的安装包不适用于arm架构,因此需要下载源码进行编译。在编译过程中遇到了包括依赖库缺失、文件格式错误、配置脚本等问题,逐一解决后成功安装,并配置了Qt环境和QtCreator。对于编译QML项目,特别强调了xcb库的重要性。文章最后提到了编译项目时可能出现的错误及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

国产系统:UOS20
内核版本:4.19.0-arm64-desktop
处理器:华为鲲鹏920@2.6GHz
在这里插入图片描述

目标,将现有Qt项目移植到改系统下进行QML项目开发。

开始

准备安装Qt5.15.2 ,Qt官方提供的安装包都是x86架构下的,不能直接在arm架构下安装,网上看了很多示例,说可以直接在终端通过命令行来安装:
sudo aptitude install libdtkwidget-dev qt5-default qtcreator qtdeclarative5-dev

这样确实可以安装Qt,但是装的是默认版本,经测试安装后是Qt5.11.3。

我需要的是Qt5.15,所以只能下载Qt源码进行编译安装。

下载源码

首先在官网下载Qt5.15.2的源码:地址在这里

在这里插入图片描述
注意:一定要下载第二个,虽然这里的两个源码包只是压缩格式不同,但是经测试,第一个源码包在编译的时候会报一些奇怪的错误,比如运行configure时报错:

/bin/sh^M:解释器错误:没有那个文件或目录

这其实是由于该文件在windows下打开编辑过,换行结尾是\n\r , 而在linux下 是\n,所以才会有 多出来的\r,导致报错,解决方法是执行:sed -i 's/\r$//' configure,但是解决后又会出现其他文件的这种问题。所以直接下载第二个,就不会有这些问题了。

解压

进入到下载好的源码目录,输入命令解压:

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

检查编译器

在编译前,先检查一下本机是否有安装编译工具,我们这里选用的编译工具是aarch64-linux-gnu-g++ ,在终端输入aarch64-linux-gnu- 然后按两次tab键 会看到下面列表,说明本机已经安装过了

在这里插入图片描述

如果没有的话,需要先安装,可以通过命令先查看有哪些版本可以安装:sudo apt-cache search aarch64

在这里插入图片描述
然后通过apt-get install 安装响应的版本即可。

创建配置脚本

解压后,进入到源码目录,新建一个脚本文件并编辑:vim autoConfigure.sh

#!/bin/sh
./configure \
-prefix /home/admin123/qt5.15.2_ARM \
-confirm-license \
-opensource \
-release \
-make libs \
-nomake examples \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-fontconfig \
-system-freetype \
-opengl \
-xcb \
-dbus \
-alsa \
-gif \
-gstreamer 1.0 \
-pulseaudio 

prefix /usr/bin/qt5.15.2_ARM 是配置编译完成后安装的地址,可自行设置
-xplatform linux-aarch64-gnu-g++ 是设置交叉编译器,如果不需要交叉编译,就不用设置此项,如果没有安装要先通过命令安装

注意,我这里没有做功能裁剪,如果有些功能用不上,可以在这里配置,不进行编译(比如 -skip xx , -no xx),对configure文件的配置具体说明见这里

注意,如果是要做Qt Quick项目,那一定要加上 -xcb, 编译quick项目是需要依赖这个玩意儿,网上很多在这里设置编译配置是直接把xcb去掉不进行编译, 由于我也是第一次弄这个玩意儿,所以走了很多弯路。如果不编译xcb就会报错,qt.qpa.plugin: Could not find the Qt platform plugin “xcb” in “”

开始编译

先修改一下配置文件的权限:

chmod 777 autoConfigure.sh

运行脚本

sudo ./autoConfigure.sh
执行configure可能会遇到的问题

在这里插入图片描述
在这里插入图片描述

ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && libs.xcb && tests.xcb_syslibs && features.xkbcommon-x11' failed.

ERROR: Feature 'opengl' was enabled, but the pre-condition 'features.opengl-desktop || features.opengl-dynamic || features.opengles2' failed.

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.

ERROR: Feature 'alsa' was enabled, but the pre-condition 'config.unix && !config.qnx && libs.alsa' failed.

ERROR: Feature 'gstreamer_1_0' was enabled, but the pre-condition 'libs.gstreamer_1_0' failed.

ERROR: Feature 'pulseaudio' was enabled, but the pre-condition 'libs.pulseaudio' failed.

这是由于我们添加了响应的编译项,然后系统中缺少相关的库而导致报错,接下来就要一个个的安装这些依赖库了。

参考这里安装相关依赖:https://www.cnblogs.com/ahuo/p/11286843.html

opengl 安装依赖:libegl1-mesa-dev
pulseaudio的错误安装依赖:sudo apt-get install pulseaudio*
gstreamer的错误安装依赖:sudo apt-get install libgstreamer* gstreamer*
xcb的错误安装依赖:sudo apt-get install libxkbcommon* libxcb* libthread*

汇总一下:

sudo apt-get install bison build-essential gperf flex ruby python libasound2-dev libbz2-dev libcap-dev libcups2-dev libdrm-dev libegl1-mesa-dev libgcrypt* libnss3-dev libpci-dev libpulse-dev libudev-dev libxtst-dev gyp ninja-build  libglu1-mesa-dev libfontconfig1-dev libx11-xcb-dev libicu-dev pulseaudio* libxkbcommon* libxcb* libthread* libgstreamer* 

其他的根据错误类型自行查找安装

注意,在执行configure之前,记得先删除config.cache 缓存文件

开始编译

sudo make -j4

安装

sudo make install

编译中遇到的问题

我在编译的时候出现过一个错误,实在location模块中,错误如下:
在这里插入图片描述
提示:error: ‘program’ was not declared in this scope program()->setUniformValue(m_color_id,v); …
一大堆这种类似错误,原本我打算通过配置configure使其编译的时候跳过这个模块,但是没啥用,后来干脆直接把源码下面这个location目录删了,这个问题就搞定咯,反正我项目里面不需要用到location模块。
在这里插入图片描述

还可能会遇到以下这个报错:

qdbusmarshaller.cpp:(.text+0x6d0): `QDBusMarshaller::appendVariantInternal(QVariant const&)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x3cb0):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::appendCrossMarshalling(QDBusDemarshaller*)’中:
qdbusmarshaller.cpp:(.text+0x5ec):对‘QDBusDemarshaller::currentSignature()’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:253: recipe for target '../../lib/libQt5DBus.so.5.14.1' failed
make[3]: *** [../../lib/libQt5DBus.so.5.14.1] Error 1
make[3]: Leaving directory '/home/jaron/software/qt-build/qtbase/src/dbus'
Makefile:351: recipe for target 'sub-dbus-make_first' failed
make[2]: *** [sub-dbus-make_first] Error 2
make[2]: Leaving directory '/home/jaron/software/qt-build/qtbase/src'
Makefile:50: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/home/jaron/software/qt-build/qtbase'
Makefile:87: recipe for target 'module-qtbase-make_first' failed
make: *** [module-qtbase-make_first] Error 2

参考这篇文章可以解决: 地址

配置Qt环境

在以上步骤编译完成后,会在我们配置的安装目录下生成所有Qt的相关文件,/usr/bin/qt5.15.2_ARM
在这里插入图片描述
首先,需要将Qt的路径配置到环境变量

vi ~/.profile 

在最后面输入:

export PATH=/usr/bin/qt5.15.2_ARM/bin:$PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/bin/qt5.15.2_ARM/plugins/platforms

通过终端安装一个QtCreator:

sudo apt-get install qtcreator

安装后打开Qt Creator进行配置:
在这里插入图片描述
Qt版本添加一项,填入qmake地址:
在这里插入图片描述
添加编译器设置:

在这里插入图片描述
在这里插入图片描述
最后设置编译套件,新添加一个编译套件,将编译器和qt设置成上面对应的版本。
在这里插入图片描述

ok,接下来就可以创建项目编译了。

编译项目可能会遇到的问题

上面我们提到,编译QML 项目需要依赖xcb,否则会报错:

qt.qpa.plugin: Could not find the Qt platform plugin \"xcb\" in ""

在这里插入图片描述
这也是我遇到的一个很大的坑,网上有很多这个问题的解决方案,都是说环境变量没设置导致的,但是其实最重要的是先看看安装Qt目录下有没有这个库,我们打开Qt的安装目录:

/usr/bin/qt5.15.2_ARM/plugins/platforms/

正常情况下会有一个qxcb库
在这里插入图片描述
如果没有的话说明源码编译是有问题的,鉴于我们在编译源码的配置中并没有跳过任何模块,但是为啥没有生成这个库呢

打开Qt的源码目录,找到xcb目录:
在这里插入图片描述
打开后有一个README 文件,打开后发现:

Requires libxcb >= 1.9.1.

这就说明要编译出qxcb库,需要本地先安装libxcb 并且版本不低于1.9.1

好吧,大概知道问题了,可能是本地安装的xcb版本不够导致的。

所以接下来只要安装一个新版本的xcb库就可以正常编译源码了,编译完成后就可以在plugins/platforms/下找到libqxcb.so了。
还要注意设置环境变量:export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/bin/qt5.15.2_ARM/plugins/platforms,在上面已经写过了。

ok,后面我会单独写一篇介绍如何安装新版xcb库。

Enjoy~

Qt是一个跨平台的应用程序框架和开发工具,用于构建桌面、移动设备和嵌入式系统的图形用户界面应用程序。要安装Qt版本5.15.2,你可以按照以下步骤进行: 1. **官方下载**:首先访问Qt官方网站(https://www.qt.io/download),找到"Open Source"选项,选择适用于你的操作系统的版本(Windows、macOS或Linux)。然后,在5.15.2分支下的安装包中下载`qt-5.15.2.tar.gz`。 2. **解压文件**:将下载的tar.gz文件解压到你希望存放Qt源码的目录下,通常建议放到一个专用的开发文件夹中,比如`C:\Qt\5.15.2`(对于Windows)或`~/Qt/5.15.2`(对于Unix-like系统)。 3. **配置**:打开终端(对于Unix-like系统)或命令提示符(对于Windows),进入解压后的目录,运行`./configure`(Unix-like)或`configure.bat`(Windows),这会生成Makefile。配置时,你可以通过添加`-prefix`选项指定Qt安装位置,例如 `-prefix C:\Qt\5.15.2\install`。 4. **编译安装**:运行`make`或`jom`(如果使用JOM并行编译工具)开始编译过程。这个步骤可能需要一段时间,取决于你的硬件性能。编译完成后,运行`make install`来安装Qt库和相关工具。 5. **设置环境变量**:为了方便使用,记得将Qt安装路径添加到系统环境变量中,如`PATH`(对于全局使用)或特定项目中的`.bashrc`或`~/.zshrc`(针对特定shell)。 6. **验证安装**:安装后,可以创建一个简单的Hello World应用来测试是否安装成功。运行`qmake -project`,然后`qmake`,最后`make`并运行生成的可执行文件。
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luoyayun361

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值