热门标签 | 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 文件夹及其相关依赖。


推荐阅读
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • Java集合框架源码解读(1)——ArrayList、LinkedList和Vector
    java.util.List接口是JavaCollectionsFramework的一个重要组成部分,List接口的架构图如下:本文将通过剖析List接 ... [详细]
  • 本文详细解析了Java面试中常见的问题及答案,旨在帮助求职者更好地准备面试,提高通过率。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • 随着EOS主网的成功启动,众多开发者和投资者对其给予了高度关注。本文旨在介绍如何构建EOS开发环境,包括所需的基本硬件配置、软件安装步骤以及常见问题的解决方案。 ... [详细]
  • 本文深入探讨了Java中的代理模式,包括静态代理和动态代理的概念、实现及其应用场景。通过具体的代码示例,详细解析了如何利用代理模式增强代码的功能性和灵活性。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
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社区 版权所有