「QT」 程序发布
1 Linux
1.1 脚本拷贝1
不建议用此方法,因为拷贝的库会和系统环境冲突,导致程序无法启动
图1:依赖库冲突
原理是通过 ldd 递归找到程序的依赖库,然后拷贝过来;所以需要事先配置好依赖环境;
具体代码
1.2 linuxdeployqt2
ubuntu 16.04 亲测可用;ubuntu 16 发布到 ubuntu 14 也可用,不过需额外拷贝三个库过来,
libz.so
,libstdc++.so
,libfreetype.so
;
安装 linuxdeployqt
下载 linuxdeployqt-6-x86_64.AppImage
chmod 555 linuxdeployqt-6-x86_64.AppImage
mv linuxdeployqt-6-x86_64.AppImage /usr/local/bin/linuxdeployqt
linuxdeployqt -version # 验证安装是否成功(会输出版本信息)
配置 QT 环境变量
在 /etc/profile
或 ~/.bashrc
中加入下面代码:
#QT
# 版本号改成自己的,务必用绝对路径; ~ 代替 /home/XXX 将不会生效
export PATH=/home/XXX/Qt5.12.3/5.12.3/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/XXX/Qt5.12.3/5.12.3/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/home/XXX/Qt5.13.2/5.13.2/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/home/XXX/Qt5.13.2/5.13.2/gcc_64/qml:$QML2_IMPORT_PATH
export LD_LIBRARY_PATH=/home/XXX/Qt5.12.3/5.12.3/gcc_64/plugins/platforms:$LD_LIBRARY_PATH
使用 source ~/.bashrc
或 source /etc/profile
使配置生效;
发布
linuxdeployqt AppName -appimage
修改 default.desktop
文件
要在终端执行相关命令,文件窗口下看不到该文件;
mv default.desktop AppName.desktop
删除 default.png
,并放置一张图片,命名为 logo.png
编辑 AppName.desktop
:
Version=1.0
Type=Application
Name=AppName
Exec=AppName
Icon=logo
Comment=This is a simple program
Terminal=false
Categories=Development;
记得删除里边的额[Desktop Entry]
发布
linuxdeployqt AppName -appimage
会生成一个以 .AppImage 结尾的文件,双击可执行;
Tips
- 如果运行过程中提示缺少某些库,可使用
locate
命令定位其位置,然后拷贝至 lib 中即可; - 全程注意环境变量的配置,少库都是环境变量没配置全;
- 执行时不会搜索当前文件夹,也不会递归搜索;因此需扫描的目录全部配置到环境变量中;
2 Windows
3 MacOS
附录
A 示例代码
1. 拷贝依赖库
新建文件 copy.sh
#!/bin/bash
# ./copy.sh app release
QtPlateform=/home/XXX/Qt5.12.3/5.12.3/gcc_64/plugins/platforms
QT=/home/XXX/Qt5.12.3/5.12.3/gcc_64/lib
export LD_LIBRARY_PATH=$QT:$QtPlateform:$LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH
function cplib
{
Target=$1
dstDir=$2
#$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $dstDir)
for Variable in ${lib_array[@]}
do
cp "$Variable" $dstDir
done
}
# 拷贝库
mkdir $2
libDir=$2"/lib"
plateformDir=$libDir"/platform"
appname=$1
cplib $appname $libDir
cp -r -d $QtPlateform $libDir
cplib $QtPlateform"/libqxcb.so" $libDir
cp $appname $2
# 创建可执行脚本
file=$appname.sh
echo 'export LD_LIBRARY_PATH=$PWD"/lib:"$PWD"/lib/platforms:"' | tee $file
echo ./$appname | tee -a $file
mv $file $2
B 参考资料
-
i按时. 在Linux 下如何打包免安装的QT程序?[EB/OL]. https://blog.csdn.net/z3512498/article/details/64922180. 2017-03-22/2020-01-10. ↩
-
Waleon. 使用 linuxdeployqt 部署 Qt 程序[EB/OL]. https://mp.weixin.qq.com/s?__biz=MzA4MjI3NzQ1Nw==&mid=2247484654&idx=1&sn=86ce51b1b4e8696394cfbba9270afdbc&chksm=9f8961d0a8fee8c61bac55bdb7071df3511df200cf39d541408b610c6697744096dd6f05e0e8&mpshare=1&scene=1&srcid=0107kAG12dHTzvxGHnIteuf6&sharer_sharetime=1578362623716&sharer_shareid=ce4fc4097e45e71b03df392aeb5d7917#rd. 2019-11-19/2020-01-10. ↩
Comments