一、window
工具
- windeployqt:官方打包工具,但使用该工具后仍有可能依然会缺失dll,特别是调用了第三方库
- Dependency Walker:检查依赖dll(http://www.dependencywalker.com/)
- Inno Setup:生成安装程序(http://www.jrsoftware.org/isdl.php)
1.1 使用windeployqt打包
以Release模式编译项目,然后将release文件夹中的exe文件复制到指定目录下。
以管理员身份运行Qt 5.10.1 for Desktop,根据编译器选择对应编译版本,然后cd到放置exe的目录下,运行下面指令,完成后程序自动将需要依赖复制到对应目录下。
windeployqt name.exe
1.2 使用Dependency Walker修复缺失dll
直接运行exe文件,若无报错可跳过此步,若报错,先根据提示找到对应dll复制到目录下,如果加载了第三方库如OpenVC,可运行Dependency Walker,打开exe文件,查看依赖。
1.3 使用Inno Setup生成安装程序
(1)确保可以直接运行exe文件后,打开Inno Setup,使用向导创建脚本。
(2)设置程序信息
(3)配置应用程序
- 导入应用程序(Browse):选择对应exe文件
- 添加文件(Add files):导入所有文件
- 添加文件夹(Add folder):导入所有文件夹及其子文件夹,添加文件时会弹出窗口询问是否包含子文件夹,同时若添加文件夹需要对脚本进行修改
(4)快捷方式配置,根据需求设置,可采用默认
( 5)安装配置,根据需求设置,可采用默认
(6)修改脚本
默认情况下,添加文件夹中的内容安装后会放置在与程序同级目录下,若需要保持原本的目录架构,需要修改包含文件夹相关的脚本,在"{app}"中添加文件夹的名字"{app}\fileName"。
(7)编译生成安装包,完成后可保存脚本用于程序修改后重新打包
二、Ubuntu
2.1 程序编译打包
- 使用Release版本编译程序
- 新建文件夹test,并将执行文件(test)移动到空白文件夹中
- 执行打包脚本pack.sh
pask.sh脚本内容
#!/bin/sh
exe="test" #程序名称
des="<dir>/test" #程序所在目录
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
给予权限
sudo chmod 777 pack.sh
执行
./pack.sh
2.2 生成执行文件
在同级目录下编写执行脚本test.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
export LD_LIBRARY_PATH
$dirname/$appname "$@"
给予权限
chmod +x test.sh
执行
./test.sh
注意:执行程序时,运行的是脚本而不是执行文件