QT客户端在 linux ubuntu, UOS 打包发布
1. 用QT Creator 完成编译,并且能运行。在主程序的.pro文件添加
QMAKE_LFLAGS += -Wl,-rpath=./
表示要加载当前目录的动态库,但实际测试,应该是没起作用,加上没坏作用。
2. 写了5个脚本,分别为install.sh, qt.conf, startup.sh, xxx.desktop, make_package.py, 打包时,直接运行 python make_package.py即可。
脚本执行过程和原理:install.sh 和deploy 后的bin 目录的tar.gz压缩包,进行拼接,生成一个 .run文件,在执行 .run文件时候,在将.run文件分离成.sh和.tar.gz文件。
(1)install.sh 源码如下,最后要有一行空行,lines的值要比空行大1,即取出压缩包的内容:
#!/bin/bash
lines=12
tail -n +$lines "$0" > /tmp/xxx.tar.gz
tar -zxvf /tmp/xxx.tar.gz -C /tmp
sudo rm -rf /usr/local/xxxEXE
sudo mkdir /usr/local/xxxEXE
sudo rm -rf /usr/share/applications/xxx.desktop
sudo mv /tmp/xxx/* /usr/local/xxxEXE/
sudo cp /usr/local/xxxEXE/xxx.desktop /usr/share/applications/
exit 0
(2)qt.conf 源码如下,注意Prefix,否则会找不到动态库:
# Generated by linuxdeployqt
# https://github.com/probonopd/linuxdeployqt/
[Paths]
Prefix = ./
Plugins = plugins
Imports = qml
Qml2Imports = qml
(3)startup.sh源码如下,指定动态库路径,否则会找不到动态库:
#!/bin/bash
echo "start entry"
echo "current path: ${PWD}"
cd /usr/local/xxx/
echo "now path is: ${PWD}"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/xxxEXE:/usr/local/xxx/lib
./xxx
(4) desktop源码如下,创建启动图标
[Desktop Entry]
Encoding=UTF-8
Name=xxx
Exec=sh /usr/local/xxxEXE/startup.sh
Icon=/usr/local/xxxEXE/skin/images/logo.png
Terminal=false
Type=Application
StartupNotify=true
(5) make_package.py,控制整个打包流程
#coding=utf-8
import os
print("Create package for xxx.")
os.system("rm -rf xxx.run")
os.system("cp -r ../../bin/ ./xxx")
os.system("cd xxx; rm -rf *.dll *.a; cd -")
os.system("cp startup.sh ./xxx/")
os.system("cp xxx.desktop ./xxx/")
os.system("cd xxx; linuxdeployqt xxx -appimage -verbose=2")
os.system("cd xxx; rm -rf *.AppImage")
os.system("cp qt.conf ./xxx/")
os.system("tar -zcvf xxx.tar.gz ./xxx")
os.system("cat install.sh xxx.tar.gz > xxx.run")
os.system("rm -rf xxx xxx.tar.gz")
os.system("chmod 777 xxx.run")
print("Over.")
注意:在这个过程中,可能会报找不到某些库,一个一个安装即可,如,
1. 编译,安装 linuxqdeploy
2. 安装appimage
3. 安装缺省的动态库
sudo apt-get install postgresql
sudo apt-get install unixodbc
sudo apt-get install patchelf