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


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
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社区 版权所有