Linux环境下Qt应用程序打包与发布

news2025/6/21 12:50:00

本文介绍Linux环境下Qt应用程序的打包与发布。

Linux环境下,在开发机器上开发完应用程序,需要部署到其他非开发环境的机器上,这时,需要对开发的Qt应用程序进行打包,以确保可以在其他机器平台(非开发环境)上能正常使用。

1.准备工作

为方便各文件的有效组织,需对不同的文件进行归类,这里以“fixture”项目为例。建立“fixture”文件夹(可根据实际项目进行命名),在此文件夹下依次建立"bin","lib","plugins"文件夹,以备用。如下图所示。

2.lib文件夹

lib文件夹主要放置应用程序依赖的一些库。这里建立"copylib.sh"一个脚本。内容如下:

#!/bin/bash

LibDir=$PWD"/lib"
Target=$1

lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))

$(mkdir $LibDir)

for Variable in ${lib_array[@]}
do
    cp "$Variable" $LibDir
done

赋予"copylig.sh"可执行权限:

sudo chmod a+x copylib.sh

建立好脚本,下一步就需要找出应用程序以来的库了,这里分2步。

1)应用程序依赖的库

a)将"copylib.sh"复制到项目工程的"xxx-Release"目录下。

b)执行脚本命令(命令行参数可根据情况改变):

copylib.sh fixture

这时,在当前目录下会自动建立一个lib的文件夹,并把应用程序依赖的库全部复制到这里。

c)复制lib文件夹中所有内容到“1.准备工作”的lib文件夹。

2)libqxcb.so依赖的库

a)将"copylib.sh"复制到Qt开发工具下的"plugins/platforms"目录下。我的目录路径为:“/opt/Qt5.13.2/5.13.2/gcc_64/plugins/platforms”,如下图所示:

b)执行脚本命令(因在系统目录,这里需要加sudo):

sudo copylib.sh libqxcb.so

这时,在当前目录下会自动建立一个lib的文件夹,并把"libqxcb.so"依赖的库全部复制到这里。

c)复制lib文件夹中所有内容到“1.准备工作”的lib文件夹,如有冲突直接覆盖掉。

至此,我们完成了“lib”文件夹的内容。

3.plugins文件夹

plugins文件夹主要放置Qt应用程序运行所依赖的一些插件。直接复制Qt开发工具下的"plugins"目录下的"platforms"目录到此文件夹。当然,如果应用程序还依赖其他插件可以将"plugins"目录下其他需要的插件一并拷贝。

至此,我们完成了“plugins”文件夹的内容。

4.bin文件夹

bin文件夹主要放置我们编译,链接好的应用程序及Qt相关的配置。

1)复制"xxx-Release"目录下的可执行文件到此文件夹。

2)建立配置文件"qt.conf",填充如下内容:

[Paths]
Prefix=../
Plugins=plugins

指定应用程序依赖的插件。

至此,我们完成了“bin”文件夹的内容。

5.主目录文件夹

应用程序要想运行,还需要配置相关的环境变量。建立1个以应用程序名称为文件名的脚本,如我的文件名为"fixture.sh",添加如下内容:

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname/lib
export LD_LIBRARY_PATH
$dirname/bin/$appname "$@"

这里指定了库的路径及应用程序的路径。赋予脚本可执行权限:

sudo chmod a+x fixture.sh

至此,我们完成了主目录文件夹的所有内容。

6.执行&测试

将打包后的内容拷贝到非开发环境机器(可用虚拟机建立1个基本运行环境),执行主目录下的脚本:

cd fixture
./fixture.sh

正常情况下,程序得以执行。

测试完成后就可以将文件夹打包压缩作为应用程序发布。

总结,本文介绍Linux环境下Qt应用程序的打包与发布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20231012_python练习_服务端与客户端数据交互v2_增加xlsx表格数据批量导入数据库

服务端增加根据上传附件格式 xlsx 类型,将表格第一个sheet数据批量快速导入数据库 服务端 import socketserver import json import os #import pymysql import cx_Oracle #Oracle 数据库连接 import time import tqdm import pandas as pd import openpyxlclass …

Linux---(二)基本认识与安装

文章目录 前言一、操作系统的概念、定位二、使用XShell远程登录Linux1.下载安装XShell2.查看 Linux 主机 ip3.使用XShell登录主机4.XShell 下的复制粘贴 前言 一、操作系统的概念、定位 1.操作系统是一款进行软硬件资源管理的软件 硬件资源管理:将CPU、键盘、显示…

uni-app:本地缓存的使用

uni-app 提供了多种方法用于本地缓存的操作。下面是一些常用的 uni-app 本地缓存方法: uni.setStorageSync(key, data): 同步方式将数据存储到本地缓存中,可以使用对应的 key 来获取该数据。 uni.setStorage({key, data}): 异步方式将数据存储到本地缓存…

Leetcode: 931.下降路径最小和(动态规划)

1. 题目解析 LeetCode链接 根据题目可以得出,当处于 [i][j] 位置时只能从 [i - 1][j - 1],[i - 1][j],[i - 1][j 1] 这三个位置到达, 所以我们想要得到当前最小的路径和只需要得到上述三个位置的最小值加上该位置的值即可。 2…

Redis(五)

文章目录 一、Redis键值设计(一)key结构设计(二)拒绝BigKey什么是BigKey?BigKey的危害如何发现BigKey (一)恰当的数据类型 二、批处理优化三、服务端优化四、集群最佳实践 一、Redis键值设计 &…

区块链技术在供应链管理中的创新应用

区块链技术以其独特的不可篡改和透明性特点,正在逐步改变供应链管理的传统模式。本文将探讨区块链技术在供应链管理中的创新应用及其带来的效益。 区块链技术的出现为许多行业带来了创新的可能,其中之一就是供应链管理。通过区块链技术,企业可…

记录项目运行起来后在项目的控制台,直接展示抽中奖品的弹框

首先运行项目或者打开线上项目, 在控制台或者项目代码中找到调用出这个弹框的方法, 在控制台直接vm.这个方法() 来调用 可以看到弹框出来了

MyBatis基础之注解与SQL 语句构建器

文章目录 注解实现简单增删改查SQL 语句构建器SelectProvider举例 注解实现简单增删改查 在 MyBatis 的核心配置文件中&#xff0c;你需要配置的不是 mapper 映射文件&#xff0c;而是 Mapper 接口所在的包路径。 <!-- 在配置文件中 关联包下的 接口类--> <mappers&…

【STM32单片机】宠物定时喂食器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用按键、IIC OLED液晶、蜂鸣器、继电器投喂控制等。 主要功能&#xff1a; 系统运行后&#xff0c;OLED液晶显示初始时间&#xff0c;默认工作在自动投…

核心概念:从晶体管到集成电路到摩尔定律

目录 晶体管 集成电路 摩尔定律 总结 这芯片和半导体是不是一回事儿呢&#xff1f;怎么我有时候听人说芯片行业&#xff0c;有时候又听人说半导体行业&#xff0c;好像他们说的都是一回事&#xff1f; 不知道你是不是也有这样的问题。其实啊&#xff0c;这问题很简单&…

arm实验

设置按键中断&#xff0c;按键1按下&#xff0c;LED亮&#xff0c;再次按下&#xff0c;灭 按键2按下&#xff0c;蜂鸣器叫&#xff0c;再次按下&#xff0c;停 按键3按下&#xff0c;风扇转&#xff0c;再次按下&#xff0c;停 头文件 #ifndef __CTRL_KEY_H__ #define __CT…

python 操作FT232H——(1)准备工作与IO输出方波信号

1.准备工作&#xff1a; python环境&#xff1a; 安装python 环境&#xff0c;我目前使用的是pycharm2023.2.1 community Edition 版本 需要注意设置python解释器的版本及关联本地库&#xff0c;这样就不需要在新的工程中安装库文件了&#xff0c;&#xff08;当然也有缺点&…

Activity页面不显示toolbar

页面显示如下&#xff0c;显示toolbar, 想实现不显示toolbar&#xff0c; 1、在manifest里设置 android:theme"style/AppThemeNoTitle"&#xff0c;可以隐藏&#xff0c;但是整个页面显示为透明的了&#xff0c;activity整体类型发生改变 2、或者设置这个&#xf…

如何逐步掌握STM32开发技巧?

第一步&#xff1a;建立开发环境 选择Keil MDK等开发环境&#xff0c;根据芯片型号安装相应库。 第二步&#xff1a;备齐开发板和资料 选择最小系统板&#xff0c;可自行搭建外围电路&#xff0c;更深入了解硬件。 第三步&#xff1a;了解STM32 观看视频教程&#xff0c;快速…

03 独立看门狗 hal库 stm32cubemx

1.设置配置参数 > 2.初始化 IWDG_HandleTypeDef hiwdg;/* IWDG init function */ void MX_IWDG_Init(void) //Tout((42^prer) rlr) /40 // IWDG_PRESCALER_8 (42^prer) 8/40 *5*2000 64/40 *4095 ---6s {/* USER CODE BEGIN IWDG_Init 0 *//* USER CODE END IWDG_…

python-arima模型statsmodels库实现-有数据集(续)-statsmodels-0.9.0版本

python-arima模型statsmodels库实现-有数据集&#xff08;续&#xff09; 这篇博客是上一篇python-arima模型statsmodels库实现的续集&#xff0c;上一篇采用的statsmodels版本应该要高一点&#xff0c;如果使用低版本的statsmodels代码会有bug&#xff0c;这一篇则是针对stat…

docker制作自定义版本的jdk镜像

1、下载jdk版本&#xff0c;这里以jdk1.8.0_381为例 Java Downloads | Oracle 2、创建Dockerfile文件 此操作在安装有docker环境的centos系统下操作&#xff0c;如果没有安装请参考此文章&#xff1a;http://t.csdnimg.cn/NCCRB vim Dockerfile From debian MAINTAINER "…

Arya小科普 | 硬件软件基础知识 Java语言的前世今生 James Gosling老爷子的小故事 Java下载 和 IDEA工具

前言 1.从硬件到软件的计算机基础知识&#xff1b; 2.Java之父的小故事&#xff1b; 3.Java语言的前世今生&#xff0c;及其特点&#xff1b; 4.Java下载 和 IDEA工具&#xff1b; 硬件和软件 键盘就是硬件&#xff0c; 操作系统就是软件。 硬件&#xff1a;设备和计算机打交…

核货宝:服装店收银系统必备的五大功能

收银系统对于服装店的经营至关重要&#xff0c;它不仅能简化收银流程&#xff0c;还能提供实时数据和综合报告&#xff0c;帮助店主更好地管理店铺。在选择服装店收银系统时&#xff0c;有五个必备功能需要考虑。本文将介绍这五大功能&#xff0c;并解释其在服装店中的重要性。…

我发现了计算机专业,能拉开很大差距的方式,计算机大一新生必看!

这个社会实在是太卷了&#xff0c;而程序员又是一个不断学习的行业。因此&#xff0c;如果你特别想和别人有一定差距&#xff0c;千万不能让自己信息闭塞。只要你多了解一些学习资源&#xff0c;学习更努力一些&#xff0c;就能离成功更近一步✨&#xff01; 下面&#xff0c;就…