热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Qt5.15.2在银河麒麟龙芯平台打包的实战经验

本文详细记录了在银河麒麟操作系统和龙芯架构上使用Qt5.15.2进行项目打包时遇到的问题及解决方案,特别关注于linuxdeployqt工具的应用。

Qt 5.15.2 在银河麒麟龙芯平台打包的实战经验


在银河麒麟操作系统和龙芯架构上进行 Qt 5.15.2 项目的打包过程中,遇到了不少挑战。以下是一些关键点和解决方法。


  • 对于依赖库的处理,linuxdeployqt 是一个非常有效的工具。虽然网上有很多人自己编写脚本通过 ldd 拷贝依赖库,但这种方式往往会导致段错误(segmentation fault),除非是纯 C++ 代码且没有复杂的自定义绘制。
  • linuxdeployqt 的官方 GitHub 仓库仅提供了针对 x86 架构的 AppImage 包,该包集成了 linuxdeploy(用于查找库)、patchelf(用于修改 ldd)和 appimagetool(用于生成 AppImage)。x86 架构下这些工具非常好用。
  • 对于国产化环境中的 ARM 和 MIPS 架构,作者曾提供过 ARM 的 AppImage 包,但官方 GitHub 仓库中并未包含。MIPS 架构则完全没有现成的 AppImage 包可用。
  • 由于缺乏现成的工具包,只能自行编译源码。以下是具体的步骤:

  1. 首先安装 patchelf,在银河麒麟系统中可以直接通过 apt 安装:sudo apt install patchelf
  2. 下载 linuxdeployqt 源码:git clone https://github.com/probonopd/linuxdeployqt.git
  3. 编译源码,某些用户建议需要调整 libc 版本校验和 qmake 路径,但实际上无需任何修改即可成功编译:cd linuxdeployqt & cmake CMakeLists.txt & make
  4. 设置可执行权限并将编译结果拷贝到 /usr/bin 目录供后续使用:cd ./tools/linuxdeployqtsudo chmod a+x linuxdeployqtsudo cp linuxdeployqt /usr/bin/
  5. 如果不需要使用 appimagetool,则可以跳过此工具的编译。

  • 在 Qt Creator 中配置好编译套件 Kit 即可正常使用 Qt 环境;若要在 Shell 中使用,推荐通过设置环境变量的方式。打包 QML 项目时需要用到 qmlimportscanner,若未正确配置可能会导致 QML 解析失败。银河麒麟自带的 Qt 环境中所有工具均为 qtchooser 的软链接,直接修改 /usr/lib/mips64el-linux-gnu/qt-default/qtchooser/default.conf 文件即可。
  • 将可执行文件拷贝到指定目录,并让工具自动查找依赖库:sudo linuxdeployqt SSLVPN_Linux_Qt -qmldir=/home/vpn/qt5.15.2_mips/ -appimage。不加 -appimage 参数时会缺少一些必要的库,导致程序无法运行。
  • 最终生成的文件结构包括 lib、plugins 和 qml 目录,以及两个可执行文件和启动脚本。其中 plugins/platforms 文件夹内的 libqxcb.so 是必不可少的,同时还需要其依赖的库(如 xcb)。

启动脚本 runApp.sh 如下:

#!/bin/bash
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
export QML2_IMPORT_PATH=./:$QML2_IMPORT_PATH
export QT_PLUGIN_PATH=./:$QT_PLUGIN_PATH
ldd SSLVPN_Linux_Qt > 1.txt
$(pwd)/SSLVPN_Linux_Qt

此外,对于前后端分离的 QML 项目,除了复制依赖库外,还需额外复制 QML 文件夹及其相关依赖。


推荐阅读
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细探讨了Netty中Future及其子类的设计与实现,包括其在并发编程中的作用和具体应用场景。我们将介绍Future的继承体系、关键方法的实现细节,并讨论如何通过监听器和回调机制来处理异步任务的结果。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
author-avatar
手机用户2502923261
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有