【QT入门到晋级】QT项目打生产环境包--(Linux和window)

前言

使用QTcreator完成正常编译后,在构建目录中有可执行程序生成,如果直接把可执行程序拷贝到干净的生产环境上是无法运行成功的,使用ldd(查看程序依赖包)会发现缺失很多QT的特性包,以及将介绍国产Linux桌面系统的QT打包和window系统的打包。

什么是打生产环境包

生产环境通常都是干净的,生产环境是不需要与开发环境一样,都安装QT框架包,但QTcreator编译出来的程序必然依赖qtcore、qtweight等特性包,所以必须把开发的程序依赖的包进行打包后,一起安装到生产环境,程序才能正常运行。

国产Linux桌面系统打包

统信UOS系统和麒麟kylin系统是国产的桌面系统,两个系统与Ubuntu的渊源比较深,在统信UOS系统上打的QT包,在麒麟kylin系统上基本都能直接运行(如果缺少依赖包,通常不是QT特性包,而是系统环境包)。

在Linux桌面系统上打包,使用的工具是linuxdeployqt,这是一个第三方开源代码的工具,在下载的QT框架里面是没有的,需要自己下载后编译出来,以下是其他博主分享的过程,我只搬运,就不照抄了:

【(灰常详细) QT宿主机使用linuxdeployqt 打包并在没有QT环境的目的机运行程序中遇到的坑】_cmake error: automoc for target linuxdeployqt: cou-CSDN博客

懒人笔记-QT程序UOS打包篇_uos qt 打包-CSDN博客

linuxdeployqt既可以打普通的qt项目包,也可以打qml项目的包,下面提供我使用的打包脚本(qtpkg.sh):

复制代码
#!/bin/bash
#打包操作说明:
#打QT包,参考命令:sh qtpkg.sh qt /path/to/qtprogram
#参数说明:
#1、qt 表示打qt类型的包
#2、/path/to/qtprogram  表示待打包,已经编译好的目录(QTcreator Release模式编译的目录)
#打qml包,参考命令:sh qtpkg.sh qml /path/to/qmlprogram  /pkg/qmlcore
#1、qml 表示打qml类型的包
#2、/path/to/qmlprogram  表示待打包,已经编译好的目录(QTcreator Release模式编译的目录)
#3、/pkg/qmlcore 表示源码及资源路径,qml需要额外的加载资源,必须引用源代码
# 检查参数数量是否正确
if [ $# -eq 0 ]; then
    echo "exp:sh qtpkg.sh qt /path/to/qtprogram"
    echo "exp:sh qtpkg.sh qml /path/to/qmlprogram  /pkg/qmlcore"
    exit 1
fi

app_name=`cat $2/Makefile |grep "QMAKE_TARGET  ="|awk -F ' ' '{print $3}'|tr -d '\n'`
echo $app_name
cd $2
if [ "$1" = "qt" ]; then
	echo "qt程序打包开始..."
	rm -rf *.o
	rm -rf moc*
	rm -rf *.h
	/home/linuxdeployqt $app_name -appimage
elif [ "$1" = "qml" ]; then
	echo "qml程序打包开始..."
	rm -rf *.o
	rm -rf moc*
	rm -rf *.h
	rm -rf *.cpp
	./linuxdeployqt  $app_name -qmldir=$3    #linuxdeployqt跟qtpkg.sh放在同一个目录
fi

window桌面系统打包

在window系统编译好程序之后,直接点击编译好的程序,会报依赖包错误。跟Linux环境不一样,window的QT框架包里面是包含了打包工具的,不需要直接编译源代码,名称是windeployqt。打包过程如下:

1、在系统功能菜单中打开MinGW命令窗口(一定要与开发的版本一致才行)

2、在D:\pkg下创建一个新的文件夹,比如newprogram(这个目录是执行打包命令的目录)

3、把编译好的Release版本的exe文件(比如newprogram.exe)拷贝到新建的文件夹下(D:\pkg\newprogram)--只需要拷贝exe文件,其他文件不需要管

4、在MinGW命令窗口中进入D:\pkg\newprogram

5、在该文件中windeployqt 【exe程序名】,比如:windeployqt cstsvr.exe

注意事项

QT的打包很讲究一致性(版本、路径)。

版本一致性:比如在Linux下,先安装了QT5.12编译打包工具linuxdeployqt,而你是用QT5.15开发并编译出Release应用,这个时候用linuxdeployqt打包QT5.15开发的应用是打包失败的,打包过程会提醒QT版本不一致;

路径一致性:比如在Linux下,先把QT5.12安装在**/home/qt5.12目录** 下,并编译打包工具linuxdeployqt,然后把QT5.12卸载掉,然后重新安装在**/home/qt目录** 下,此时开发并编译出Release应用,这个时候用linuxdeployqt打包开发的应用是打包失败的,打包过程会提醒QT路径不一致(linuxdeployqt按照原来的**/home/qt5.12**路径,找不到相关的环境了!)。

相关推荐
背影疾风2 分钟前
C++之路:类基础、构造析构、拷贝构造函数
linux·开发语言·c++
Ting-yu6 分钟前
Java中Stream流的使用
java·开发语言·windows
【ql君】qlexcel35 分钟前
Notepad++ 复制宏、编辑宏的方法
开发语言·javascript·notepad++··宏编辑·宏复制
Zevalin爱灰灰44 分钟前
MATLAB GUI界面设计 第六章——常用库中的其它组件
开发语言·ui·matlab
冰糖猕猴桃1 小时前
【Python】进阶 - 数据结构与算法
开发语言·数据结构·python·算法·时间复杂度、空间复杂度·树、二叉树·堆、图
wt_cs1 小时前
银行回单ocr api集成解析-图像文字识别-文字识别技术
开发语言·python
_WndProc2 小时前
【Python】Flask网页
开发语言·python·flask
liujing102329292 小时前
Day04_刷题niuke20250703
java·开发语言·算法
feiyangqingyun2 小时前
Qt音视频开发技巧/推流带旋转角度/rtsprtmp推流/保存文件到MP4/拉流解析旋转角度
qt·音视频·qt旋转角度推流
能工智人小辰2 小时前
二刷 苍穹外卖day10(含bug修改)
java·开发语言