deepin(深度)系统下使用linuxdeployqt将qt5.12.0的程序打包发布_linuxdeploy打包_只是个~小不点的博客-CSDN博客
1. 配置环境
1.1安装依赖库
sudo apt install patchelf
1.2配置QT环境
利用.bashrc文件存储并加载你的终端配置和环境变量以提高在终端中的工作效率
vim ~/.bashrc
export PATH=/home/你的路经/Qt5.12.0/5.12.0/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/你的路经/Qt5.12.0/5.12.0/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/home/你的路经/Qt5.12.0/5.12.0/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/home/你的路经/Qt5.12.0/5.12.0/gcc_64/qml:$QML2_IMPORT_PATH
2下载linuxdeployqt
地址:Releases · probonopd/linuxdeployqt · GitHub
( 我在附件里加了 linuxdeployqt 源码包Source code.tar.gz)
解压tar包
cd linuxdeployqt-continuous/ 进入目录 ,目录内容如下
2.1 修改linuxdeployqt源代码
为了避免编译好的包运行时检测到我们的系统版本过高,不继续执行的问题,我们编译前,将tools/linuxdeployqt/main.cpp(约200行附近)中的下述代码注释掉:
// openSUSE Leap 15.0 uses glibc 2.26 and is used on OBS
/*if (strverscmp (glcv, “2.27”) >= 0) {
qInfo() << “ERROR: The host system is too new.”;
qInfo() << “Please run on a system with a glibc version no newer than what comes with the oldest”;
qInfo() << “still-supported mainstream distribution, which currently is glibc 2.20.”;
qInfo() << “This is so that the resulting bundle will work on most still-supported Linux distributions.”;
qInfo() << “For more information, please see”;
qInfo() << “https://github.com/probonopd/linuxdeployqt/issues/340”;
return 1;
}*/
2.2编译linuxdeployqt源代码
root@ubuntu:~/downloads/linuxdeployqt-6# ls
BUILDING.md LICENSE.GPLv3 linuxdeployqt.pro sync.profile
CMakeLists.txt LICENSE.LGPLv3 README.md tests
Dockerfile linuxdeployqt.AppDir src tools
root@ubuntu:~/downloads/linuxdeployqt-6# qmake
Info: creating stash file /home/laohu/downloads/linuxdeployqt-6/.qmake.stash
Info: creating cache file /home/laohu/downloads/linuxdeployqt-6/.qmake.cache
root@ubuntu:~/downloads/linuxdeployqt-6# make
…
编译出来的源程序会放在./bin目录下,然后将生成的程序放到/usr/local/bin/目录下(为了方便)
3.发布程序
将可执行程序复制到空目录下,进入目录输入
linuxdeployqt yourappname -appimage
第二个参数是想要打包的可执行程序
最后一个not found ,不用理会
有可能会提示如下:
错误:桌面文件丢失,正在创建默认文件(您可能需要编辑它)
错误:图标文件丢失,正在创建默认文件(您可能需要编辑它)
这些不用理会
3.1添加程序依赖库
为防止程序需要额外的库依赖:在要打包的目录里编写一个pack.sh脚本,把当前程序可能需要的其他库打包到指定目录下(先创建目录extraLib)
#!/usr/bin/sh
exe="yourappname" #程序名称
des="/打包文件夹位置/extraLib" #打包文件夹位置
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
chmod +x pack.sh
sudo ./pack.sh
删掉extraLib里面存在lib下的已有库,留下没有的。
打包压缩,拷贝或者发送到其他没有qt环境的linux机器中,解压,执行AppRun或者我们的执行文件即可