首页 > 系统相关 >Windows、Linux下,基于QT的打包方法

Windows、Linux下,基于QT的打包方法

时间:2024-05-26 17:33:40浏览次数:31  
标签:文件夹 QtQuick QT lib Windows autoFileSet sh Linux 打包

整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考
ps:

  • 第一次做Windows下打包,用了2小时,第二次20秒
  • 第一次做Linux(ubuntu)下打包,用了8小时,第二次1分半

一、Windows

有许多比较坑的帖子,会带新人走不少弯路,大家注意鉴别(没方法,随缘)
1、首先,找到自己编译的对应版本:
在这里插入图片描述
2、找到构建后的文件夹,复制当前生成的exe文件到一个新的文件夹(打包的目的文件,如:fileName)
在这里插入图片描述
3、找到对应版本的Qt文件,右键管理员运行
在这里插入图片描述
4、通过命令走到指定的地址
在这里插入图片描述
5、输入打包命令

windeployqt autoFileSet.exe --qmldir F:\Git-program\qt_practice\autoFileSet

autoFileSet.exe是我的程序名
F:\Git-program\qt_practice\autoFileSet 是我QML源文件地址

在这里插入图片描述
到这里就拷贝成功了
在这里插入图片描述

二、Linux

Linux下有两种方法,一种是通过自动化打包工具,一种是通过脚本,各有利弊

程序名以autoFileSet为例

1、自动工具打包

1、工具下载:下载地址
我使用的虚拟机。

2、修改名称:mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt

3、修改权限:chmod 777 linuxdeployqt

4、放入/usr/local/bin目录,方便调用:sudo mv linuxdeployqt /usr/local/bin

5、测试,打印版本:linuxdeployqt --version
结果:

linuxdeployqt (commit 2b38449), build 62 built on 2023-12-27 21:00:01 UTC

6、根据环境变量找寻qt库文件:vim ~/.bashrc

7、在Vim里添加对应路径:
在这里插入图片描述

8、添加后让其生效:source ~/.bashrc

9、测试,打印版本:qmake --version

QMake version 3.1
Using Qt version 5.12.12 in /home/***/Qt5.12.12/5.12.12/gcc_64/lib

10、创建对应的文件夹,把可执行文件拷过来。

11、执行自动拷贝:linuxdeployqt fileName -appimage,检查是否拷贝成功
在这里插入图片描述
12、运行测试:./ autoFileSet

13、压缩文件到当前目录:sudo tar cvf autoFileSet.tar ./*

如有库的缺失看第三节

2、脚本打包

1、新建文件夹:mkdir File
2、进入文件夹:cd File
3、新建脚本文件:touch copylib.sh
4、通过vim修改脚本内容:

#!/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

5、新建脚本文件:touch autoFileSet,修改内容

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

6、修改权限

sudo chmod 777 copylib.sh
sudo chmod 777 autoFileSet.sh

7、获取release生成的文件,拷贝至目标文件File
在这里插入图片描述

8、执行./copylib.sh autoFileSet命令,生成lib文件夹
9、将lib文件夹下面的库拷贝到File文件夹下面,此时完成了添加程序依赖库
10、在Qt的安装目录下,将copylib.sh复制到platforms文件夹当中,执行./copylib.sh libqxcb.so命令,此时也会生成lib文件夹,同样复制lib内的库到File下,重复的选替换即可
11、将platforms整个文件夹拷贝到File文件夹下
12、执行./autoFileSet.sh即可运行软件
如有库的缺失看第三节

3、库的缺失

两种打包方法都有问题,但是报错会提醒到我们,无非是某些库没有复制到,这里需要我们进行手动复制、拷贝。
常见错误如:

QQmlApplicationEngine failed to load component
qrc:/main.qml:3 无法为模块“QtQuick.Controls”:
无法加载库 /home/mbox/autoFileSet/QtQuick/Controls.2/libqtquickcontrols2plugin.so:
(libQt5QuickTemplates2.so.5: cannot open shared object file: No such file or directory) 加载插件

这代表缺少libQt5QuickTemplates2.so.5

QQmlApplicationEngine failed to load component
qrc:/main.qml:3 模块“QtQuick.Controls”没有安装
qrc:/main.qml:1 模块“QtQuick”没有安装
qrc:/main.qml:6 模块“QtQuick.Controls.Material”没有安装
qrc:/main.qml:4 模块“QtQuick.Layouts”没有安装
qrc:/main.qml:2 模块“QtQuick.Window”没有安装

这代表识别QtQuick失败,这个我走的比较久,原因是太信任报错了。
因为当前主流已经使用到QtQuick2版本以后了,这里的报错意思是识别不到QtQuick2,一定注意一下。
确认方法:修改本地QT的名称,比如:Qt5.12.12,修改为666,如果程序正常运行、功能无缺陷就代表打包成功了。

压缩

验证无误之后,就可以压缩文件了:sudo tar cvf autoFileSet.tar ./*,到此全部流程结束。

标签:文件夹,QtQuick,QT,lib,Windows,autoFileSet,sh,Linux,打包
From: https://blog.csdn.net/kris_paul/article/details/139216481

相关文章

  • Linux安装Anaconda
    清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载好安装bashAnaconda3-2020.07-Linux-x86_64.sh空格之后yes安装环境变量重新连接......
  • linux核心基础-权限管理
    1、更改文件的权限命令总结2、文件、目录的的rwx想要删除文件,要看是否有该文件所在目录,目录是否有w权限,才可以删除文件,且还得有x权限,才能进入文件夹。(用普通用户测试)3、环境变量1、env和set命令env命令为单个用户的环境变量命令为系统整体的环境变量[root@muserver1etc]......
  • Windows10/Windows11打开文件提示安全警告解决办法
    有用的方法打开Internet选项,在安全选项卡中点击"自定义级别",在"其他"项中,将"加载应用程序和不安全文件(不安全)"设置为"启用(不安全)".此搜索结果来自网络,由于我的电脑的Internet选项中的"自定义级别按钮"是被置灰了,找了一天的办法都没取消置灰,所以本人未尝试本办法,但......
  • OneForall工具的下载安装和使用(Windows和Linux)
    目录OneForall的介绍OneForall的下载OneForall的安装安装要求安装步骤(git版)安装(kali)OneForall的使用命令在Windows在Linux(kali)OneForall的结果说明免责声明本文所提供的文字和信息仅供学习和研究使用,请读者自觉遵守法律法规,不得利用本文所提供的信息从事任何违......
  • linux 死锁排查以及线程信息打印
     脚本名称,gstack.sh#!/bin/shiftest$#-ne1;thenecho"Usage:`basename$0.sh`<process-id>"1>&2exit1fiiftest!-r/proc/$1;thenecho"Process$1notfound."1>&2exit1fi#GDBdoesn&#......
  • Debian/Linux网络配置全面指南:从静态IP到DNS设置
    在Debian/Linux上配置网络涉及多个步骤,包括设置静态IP地址、配置网关和DNS服务器等。以下是一个详细的教程,指导你如何在Debian/Linux系统上进行网络配置。1.编辑网络接口配置文件在Debian/Linux上,网络接口的配置文件通常位于/etc/network/interfaces。首先,以超级用户身份......
  • Windows Server 2022 NTP服务器
    一、配置NTP服务器配置NTP服务器,为客户端提供时间同步服务。如果计算机是ActiveDirectory域控制器,则NTP服务器功能已自动启动。因此,下面的示例是计算机在工作组环境中启用NTP服务器功能。1.1使用管理员权限运行PowerShell并配置。WindowsPowerShellCopyright(C)Micro......
  • VB6重启服务WINDOWS service
     服务状态State=Running等待服务,直到停止状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Star......
  • 【Linux】为 VMware 的 Linux 系统(CentOS 7)设置静态IP地址
    文章目录准备工作查看子网掩码和网关IP确认准备设置的虚拟机端口没有被占用调整设置编辑配置文件配置文件说明完成配置,准备测试使用命令终端连接服务器我是一名立志把细节说清楚的博主,欢迎【关注】......
  • Linux 常用命令
    Linux常用命令查看资源使用情况top命令:实时显示系统资源的使用情况,包括CPU使用率、内存使用情况、进程信息等。它可以实时更新数据,您可以使用交互命令对输出进行排序和过滤。htop命令:与top类似,但提供了更友好的用户界面和更多的功能,如更丰富的进程信息和交互式......