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


推荐阅读
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • andr ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
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社区 版权所有