Qt 5.12.12 windows和linux打包部署绿色软件
本文介绍了在Windows和Linux系统下打包部署Qt 5.12.12应用程序的方法。在Windows平台,详细说明了使用MSVC和MinGW两种编译器时如何通过windeployqt工具自动打包Qt动态库、插件库和运行时库。Linux平台则介绍了两种方案:使用linuxdeployqt自动打包和通过ldd命令手动收集依赖库。文章提供了完整的目录结构和环境配置说明,帮助开发者将Qt程序部署到无开
·
Qt 5.12.12 windows和linux打包部署绿色软件
环境:
系统:windows 11/Ubuntu 20.04
Qt: 5.12.12
编译器:vs2017(win)/Mingw7.3.0(win)/gcc 9.4.0(linux)
前言
Qt开发程序后需要打包部署到没有Qt和编译器的纯净系统中正常运行,这就需要把应用程序依赖的Qt动态库(如Qt5Core.dll)、Qt插件库(如platforms/qwindows.dll)、C++运行时库(如vcruntime140.dll msvcp140.dll)以及其他第三方库(如sqlite.dll)打包部署到一起。
1. windows
1.1 msvc
- 启动Qt命令行(qtenv2.bat)
开始菜单 -> Qt 5.12.12 -> Qt 5.12.12 (MSVC 2017 64-bit)
- 打包Qt动态库及插件库
windeployqt myapp.exe
- 复制C++运行时库
vcruntime140.dll
msvcp140.dll
vcruntime140_1.dll
copy C:\WINDOWS\system32\VCRUNTIME140.dll
copy C:\WINDOWS\system32\MSVCP140.dll
copy C:\WINDOWS\system32\VCRUNTIME140_1.dll
目录结构
.
+--- myapp.exe # 主程序
+--- Qt5Core.dll # qt动态库
+--- Qt5Gui.dll # qt动态库
+--- Qt5Widgets.dll # qt动态库
+--- Qt5Svg.dll # qt动态库(SVG图片,未使用可移除)
+--- platforms # qt插件库(必须)
+--- styles # qt插件库
+--- iconengines # qt插件库(icon未使用svg可移除)
+--- imageformats # qt插件库(用到哪种图片格式保留哪个插件)
+--- D3Dcompiler_47.dll # qt动态库(DirectX相关,未使用可移除)
+--- libEGL.dll # qt动态库(OpenGL相关,windeployqt --no-angle --no-opengl-sw可移除)
+--- libGLESV2.dll # qt动态库(OpenGL相关,windeployqt --no-angle --no-opengl-sw可移除)
+--- opengl32sw.dll # qt动态库(OpenGL相关,windeployqt --no-angle --no-opengl-sw可移除)
+--- translations # qt翻译文件(不需要国际化可删除)
+--- vcruntime140.dll # C++运行时库
+--- msvcp140.dll # C++运行时库
+--- vcruntime140_1.dll # C++运行时库
1.2 mingw64
- 启动Qt命令行(qtenv2.bat)
开始菜单 -> Qt 5.12.12 -> Qt 5.12.12 (MinGW 7.3.0 64-bit)
- 打包Qt动态库及插件库
windeployqt myapp.exe
- C++运行时库(windeployqt已打包)
libgcc_s_seh-1.dll
libstdc++-6.dll
libwinpthread-1.dll
目录结构
.
+--- myapp.exe # 主程序
+--- Qt5Core.dll # qt动态库
+--- Qt5Gui.dll # qt动态库
+--- Qt5Widgets.dll # qt动态库
+--- Qt5Svg.dll # qt动态库(SVG图片,未使用可移除)
+--- platforms # qt插件库(必须)
+--- styles # qt插件库
+--- iconengines # qt插件库(icon未使用svg可移除)
+--- imageformats # qt插件库(用到哪种图片格式保留哪个插件)
+--- D3Dcompiler_47.dll # qt动态库(DirectX相关,未使用可移除)
+--- libEGL.dll # qt动态库(OpenGL相关,windeployqt --no-angle --no-opengl-sw可移除)
+--- libGLESV2.dll # qt动态库(OpenGL相关,windeployqt --no-angle --no-opengl-sw可移除)
+--- opengl32sw.dll # qt动态库(OpenGL相关,windeployqt --no-angle --no-opengl-sw可移除)
+--- translations # qt翻译文件(不需要国际化可删除)
+--- libgcc_s_seh-1.dll # C++运行时库
+--- libstdc++-6.dll # C++运行时库
+--- libwinpthread-1.dll # C++运行时库
2. linux
2.1 linuxdeployqt自动打包依赖
- 下载linuxdeployqt
wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
chmod +x linuxdeployqt-continuous-x86_64.AppImage
sudo mv linuxdeployqt-continuous-x86_64.AppImage /usr/bin/linuxdeployqt
- 配置Qt环境变量
export PATH=/opt/Qt5.12.12/5.12.12/gcc_64/bin:$PATH
export LIB_PATH=/opt/Qt5.12.12/5.12.12/gcc_64/lib:$LIB_PATH
export PLUGIN_PATH=/opt/Qt5.12.12/5.12.12/gcc_64/plugins:$PLUGIN_PATH
验证
$ qmake -v
QMake version 3.1
Using Qt version 5.12.12 in /opt/Qt5.12.12/5.12.12/gcc_64/lib
- 打包
linuxdeployqt myapp -appimage
2.2 通过ldd命令手动打包依赖
- 编写复制依赖批处理
copylib.sh
#!/bin/bash
# copylib.sh
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
- 复制依赖库
./copylib.sh myapp
注意:ldd命令只能复制依赖库,不能复制Qt的插件库。
- 拷贝所需Qt插件库
platforms/libqxcb.so
...
- 运行程序
export LD_LIBRARY_PATH=`pwd`/lib:$LD_LIBRARY_PATH
./myapp
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)