Linux 下Qt应用程序打包发布方法

2023-11-18

1、首先选择Qt中的“Release”模式,然后点击Run,在Qt工作空间生成相应的

build-项目名称-Desktop_4bec8a-Release文件夹

2、将Qt的打包脚本“deployqtapp.sh”放在build-项目名称-Desktop_4bec8a-Release文件夹内,deployqtapp.sh源码如下:

注意:将第98行的libqxcb.so 替换到本机下“libqxcb.so”的路径。

3、执行“deployqtapp.sh”脚本,XXX表示在build-项目名称-Desktop_4bec8a-Release文件夹内的可执行文件名。

sh deployqtapp.sh XXX

4、在build-项目名称-Desktop_4bec8a-Release文件夹内找到ota_deploy压缩文件,解压后运行ota_deploy文件夹内的“runXXX.sh”可执行文件,运行成功即可。

source ./runXXX.sh
#!/bin/bash
#################    Qt打包脚本源码    ########################
#================================================================================
# Copyright (c) 2012 - 2013 by William Hallatt.
# 
# This script is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This script is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this script (GNUGPL.txt).  If not, see
#
#                    <http://www.gnu.org/licenses/>
# 
# Should you wish to contact me for whatever reason, please do so via:
#
#                 <http://www.goblincoding.com/contact>
# 
#================================================================================

# Copy your executable as well as this script to the directory where you 
# want to create the final tar ball.  To execute, simply pass the name of the
# executable as command line parameter to this script.
#
# Worth noting is that I built Qt from source myself, you may or may not need 
# additional plugins, etc and different or additional directory structures and
# will have to edit this script to suit your needs!

if [ $# -ne 1 ]
then
        echo "Usage: $0 <executable name>"
        exit 1
fi

deployscript=${0##*/}	# delete path and leave file name remained
executable=$1

# Obtain the Linux flavour and version.
# distro=`lsb_release -d | awk '{print $2$3$4}' | sed 's/\./_/g'`

# Create the directory that will be tarred up for distribution.
# tardir=`echo $executable"_"$distro | awk '{print tolower($0)}'`
tardir=`echo $executable"_deploy" | awk '{print tolower($0)}'`
mkdir $tardir
echo "Created tar ball directory: "$tardir

# Copy executable across.
chmod u+x $executable
cp $executable $tardir
echo "Copied executable "$executable" to "$tardir

# Copy other files and dirs.
nfiles=0
ndirs=0
for files_dirs in `ls ./`
do
  if [ "$files_dirs" != "$deployscript" ] && [ "$files_dirs" != "$executable" ] && [ "$files_dirs" != "$tardir" ]; then
	if [ -d "$files_dirs" ]; then
		ndirs=$(($ndirs+1))
	else
		nfiles=$(($nfiles+1))
	fi

  	cp -r $files_dirs $tardir
  fi
done
echo "Copied other $nfiles file(s) and $ndirs dir(s) to "$tardir

# Create the libs directory.
libsdir=$PWD/$tardir/libs
mkdir $libsdir 
echo "Created libs directory: "$libsdir

# Copy all dependencies across to the tar directory.
echo "Copying dependencies..."

for dep in `ldd ./$executable | awk '{print $3}' | grep -v "("`
do
  cp $dep $libsdir
  echo "Copied dependency "$dep" to "$libsdir
done

# You will need to change this to point to wherever libqxcb.so lives on your PC.
qtplatformplugin=/usr/lib/aarch64-linux-gnu/qt5/plugins/platforms/libqxcb.so #替换到本机下“libqxcb.so”的路径
qtplatformplugindir=$tardir/platforms
mkdir $qtplatformplugindir
echo "Created platforms directory: "$qtplatformplugindir
cp $qtplatformplugin $qtplatformplugindir
echo "Copied platform "$qtplatformplugin" to "$qtplatformplugindir

echo "Copying qtplatformplugin dependencies..."
for dep in `ldd $qtplatformplugin | awk '{print $3}' | grep -v "("`
do
  cp -u $dep $libsdir
  echo "Copied qtplatformplugin dependency "$dep" to "$libsdir
done
echo "Copied qtplatformplugin dependencies"

# Create the run script.
execscript=$tardir/"run$executable.sh"
echo "Created run script: "$execscript

echo "#!/bin/sh" > $execscript
echo "export LD_LIBRARY_PATH=\`pwd\`/libs" >> $execscript
# echo "export QT_QPA_FONTDIR=\`pwd\`/fonts" >> $execscript
echo "./$executable" >> $execscript

# Make executable.
chmod u+x $execscript

# Create a README
echo "Creating README..."

readme=$tardir/README
echo "================================================================================" >> $readme
echo "Please launch $executable via" >> $readme
echo "" >> $readme
echo "                 $execscript" >> $readme
echo "" >> $readme
echo "If you run into any trouble regarding dependencies, all you need to do is to" >> $readme
echo "run " >> $readme
echo "                 $fixscript " >> $readme
echo "" >> $readme
echo "in order to automatically resolve dependencies on your behalf " >> $readme
echo "(note that you will need administrator privileges for this as this script will" >> $readme
echo "download the necessary libraries for your platform). " >> $readme
echo "" >> $readme
echo "Should you wish to contact me for whatever reason, please do so via:" >> $readme
echo "" >> $readme
echo "                 <http://www.goblincoding.com/contact>" >> $readme
echo "" >> $readme
echo "================================================================================" >> $readme

echo "Creating tarball..."
tar -zcvf $tardir".tar" $tardir

echo "Cleaning up..."
rm -rf $tardir
echo "Done!"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 下Qt应用程序打包发布方法 的相关文章

  • 从 Qt 中的半透明小部件中擦除绘制区域

    我面临着必须擦除 Qt 小部件上先前绘制的区域的问题 基本思想是 用户通过单击并拖动鼠标来选择屏幕的一个区域 并在所选区域上绘制一个矩形 标题 class ClearBack public QWidget Q OBJECT public e
  • 无法锚定到不是父级或同级 QML QtQuick 的项目

    我正在使用 QML 开发 python 桌面应用程序 我的 QML 文件中有这个 SplitView anchors fill parent orientation Qt Horizontal Rectangle color 272822
  • Qml 中的 FileDialog 在发布中不起作用

    我正在与以下项目合作Qt Quick Control 2 当我尝试在调试模式下运行软件时 FileDialog qml 可以完美打开 但是当我将其部署为发布模式时 它无法工作 这是我的代码 import QtQuick 2 4 import
  • QDomDocument 无法设置带有 标记的 HTML 文档的内容

    当我使用QDomDocument对于 HTML 内容 如果存在则无法设置内容在文档的开头 但实际上为什么 例如 考虑以下代码片段 QDomDocument doc QString content a href bar foo a qDebu
  • Qt Designer 与手动编码

    每次我使用图形工具包开始一个项目时 第一个冲突就会发生在如何处理视觉设计和小部件布局的决定上 图形工具还是手动编码 这是一个非常棘手 主观的问题 因为大多数人会根据个人喜好来决定 它还很大程度上取决于图形工具的质量 在这种情况下 我想只关注
  • 无法隐藏 QMenu 对象 QMenu::setVisible()?

    我已经建立了一个QMenu MainMenu在我的上面MainWindow在我的应用程序中 大家都习惯了 我有以下QMenu主菜单 文件 编辑 SuperHeavyExpertMenus 设置 帮助 我想隐藏子树SuperHeaverExp
  • 如何在点击 Qtablewidget 单元格时获取放置在该单元格中的小部件的行号?

    我正在尝试的是当用户选择项目时获取 QcomboBox 的行号 虽然使用它很容易获得单元格的列和行 cellClicked int int 信号 但仅当单元格上没有小部件时才有效 那么如果单元格中放置了小部件 如何获取行号 Note 所有组
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • 关于 GUI 计时器显示后台线程已用时间的建议?

    Issue 我有一个 PyQt GUI 用户按下按钮即可启动后台线程 workerThread 它是从QThread 我想要一个计时器显示 以QLabel 显示自此以来已经过去了多少时间workerThread开始 我希望这个计时器在wor
  • Mac OS X 文件关联有效,但文件图标未更改

    我使用 Qt 5 3 2 开发了一个 Mac 应用程序 该应用程序处理具有特定扩展名的文件 比方说 xyz 我创建了一个名为 XYZ icns 的图标文件 并将其添加到我的应用程序包资源文件夹中 MyApp app Contents Res
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • 如何在 QTableWidget 的行和列中自动换行文本?

    I tried QTableWidget j new QTableWidget 10000 5 centralWidget j gt setColumnWidth 0 500 j gt setColumnWidth 1 30 j gt se
  • cx_freeze:QODBC 驱动程序未加载

    我的 python 应用程序如下所示 test py from PyQt4 import QtCore from PyQt4 import QtGui from PyQt4 import QtSql import sys import at
  • [本机]:在Qt for Android中使用Java函数和第3方库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近我用qt写了一个android应用程序 但我有一个很大的问题 我可以使用 调用一些原生的android API 比如调用特殊的activit
  • 调整 QML 图像显示尺寸

    我有一个带有嵌套的 QML 窗口RowLayout 在内排我有两个图像 来源 png这些图像的文件 故意 相当大 当我尝试设置height这些图像上的属性使它们变小 但它们仍然被画得很大 Desired Appearance Actual
  • MAC 上的 QT/C++ - 未设置应用程序图标

    我正在努力解决的奇怪问题 在与我的 pro QT 项目文件相同的文件夹中 我有一个 Resources myIcon png 我试图将其设置为我构建的应用程序的图标 在 OSX 上运行 我阅读了文档 它建议在 pro 文件中添加 ICON
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • 如何在 Qt-Embedded 中(正确)输出多语言文本?

    我的目标系统是 linux 3 3 7 Qt Embedded 开源版 4 8 Droid 字体 取自 fonts droid 20111207 git 1 all deb Debian 软件包并复制到 usr lib fonts目录 主要
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi

随机推荐

  • linux修改静态ip方法&&如何使用xshell连接

    ifconfig查看本地ip和网卡信息 cd到目录 etc sysconfig network scripts 想修改那块网卡就vi他 例如修改eth0 这样eth0的网卡就修改完毕 退出vi进行网络重启 service network r
  • LVGL 控件之(Arc)弧图形绘制

    一 弧形组成 弧图形由背景弧和前景弧组成 它们有各自的起始角度和结束角度 二 控件函数使用 设置背景弧度的函数 lv arc set bg angles arc start angle end angle 或者用 lv arc set bg
  • Thymeleaf表达式

    1 标准变量表达式 th text 需要在属性里面填写 例如 用户编号 span span br 用户姓名 span span br 用户年龄 span span br 2 选择变量表达式 星号表达式 不推荐 必须使用th object属性
  • Java学习笔记 --- 布尔类型

    一 布尔类型 1 布尔类型也叫boolean类型 boolean类型数据只允许取值true和false 无null public class Bool public static void main String args boolean
  • 测试触控延时的软件,重点测试:触控屏响应时间_笔记本评测-中关村在线

    重点测试 触控屏响应时间 触控型笔记本除了有一块触控屏外 传感器及控制IC部分是十分重要的 整套电路设计优劣会直接会影响到触控的响应时间 下面就来进行实际测试 为了这个环节我们特意找到了一套专业的滑轨设备 精准性是本次测试的重点指标 由于滑
  • JavaBean与XML相互转换

    一 JavaBean注解 1 XmlRootElement 类级别注解 name属性用于指定生成元素的名字 若不指定 默认使用类名小写作为元素名 XmlRootElement name mystudent XmlRootElement pu
  • Nginx的X-Accel-Redirect实现大文件下载

    一 文件下载的几种方式 1 直接给出下载地址 使用静态文件服务器nginx下载 任何人都可以下载 无法控制用户的权限 2 后端流式读取文件内容 设置header后疯狂输出 django文档中提到 可以向HttpResponse传递一个迭代器
  • 蓝桥杯算法训练VIP-传球游戏

    题目 题目链接 题解 动态规划 这个题不能用DFS 用DFS的小朋友趁早放弃 输入数据为30 30时 输出为155117522 这就意味着要是dfs的话 需要搜到底155117522次 光遍历这么多次都会超时更别说深搜了 所以只能动归 也算
  • SpringMVC注解

    注解大全 请求注解 名称 类型 位置 作用 注意点 RequestMapping save 方法注解 SpringMVC控制器方法定义上方 设置当前控制器方法请求访问路径 如果设置在类上统一设置当前控制器方法请求访问路径前缀 路径不能重复
  • cmake脚本中的list

    代码 cmake minimum required VERSION 2 8 set mylist a list APPEND mylist b c MESSAGE mylist MESSAGE mylist foreach componen
  • 适用于 Windows 11/1 0电脑的 8 款最佳免费数据恢复软件

    在这个数字办公时代 我们总是在电脑前工作 处理海量数据 存储重要文件 然而 系统崩溃 病毒攻击或人为错误都会导致极度绝望的数据丢失 此时 专业的数据备份和恢复工具就是不幸者的救命稻草 因此 这篇文章将向您介绍适用于Windows 11 10
  • sqlloader的使用------Linux版

    其实Linux中sqlloader的操作和在windows中的操作是一样的 下面我再为大家详细地讲解一下 一 注意事项 首先要注意下面的情形 我是在虚拟机中运行的Linux系统 关于在Linux系统中root用户下多次执行sqlldr 都是
  • LSP协议被劫持导致不能上网

    故障现象 最近有同事电脑浏览器打不开网页 DNS没问题 外网地址可以PING通 本地连接显示正常 登陆QQ显示网络连接超时 打开浏览器不能显示网页 网络丢包率达到了100 本地连接数据包收到为0 查杀木马 病毒也不能解决问题 原因分析 Wi
  • 接1.1 Python语言概述

    1 1 3 Python2和Python3 初学Python的读者 在打开Python官方网站 https www python org 下载Python时 总会看到有两个可供下载的版本 python2 7和Python3 X 从版本号上来
  • Django拼接queryset

    querysets one queryset two queryset
  • _MSC_VER

    MSC VER是微软的预编译控制 MSC VER可以分解为 MS Microsoft的简写 C C编译器 VER Version的简写 MSC VER的意思就是 Microsoft的C编译器的版本 微软不同时期 编译器有不同的版本 MS V
  • upload-labs靶场-Pass-02关-思路以及过程

    开始前的小准备 upload labs靶场 是PHP环境运行的 所以我准备了一个PHP脚本和一张图片 图片好准备 PHP脚本如果不想写的话可以用我的这个获取当前时间的PHP脚本 图片默认不清楚放大看 Pass 02需要了解的信息 点击提示可
  • print() java_java的print,printf,println以及输入

    java中有三种方式向控制台输入信息 分别是print printf println 现在简单介绍一下他们之间的异同 printf主要是继承了C语言的printf的一些特性 可以进行格式化输出 print就是一般的标准输出 但是不换行 pr
  • 自动化携程酒店爬虫

    一 查看chrome版本 浏览器 chrome version 二 下载传送门 url http chromedriver storage googleapis com index html 根据自己的版本进行下载 放入C Program
  • Linux 下Qt应用程序打包发布方法

    1 首先选择Qt中的 Release 模式 然后点击Run 在Qt工作空间生成相应的 build 项目名称 Desktop 4bec8a Release文件夹 2 将Qt的打包脚本 deployqtapp sh 放在build 项目名称 D