Ubuntu18.04下使用linuxdeployqt对QT5项目打包,以及生成快捷方式

前言

此方法适用于对自己建立的QT项目进行打包,Ubuntu环境为18.04,使用QT Creator4.12.3 Based on Qt5.14.2。项目打包之后可以复制到其他电脑上运行,切具有快捷启动方式。

一.下载并安装linuxdeployqt

1.下载

方式一:若系统在ubuntu18.04以下,可以直接去 github下载编译好的linuxdeployqt-x86_64.AppImage 应用程序文件
方式二:若系统ubuntu18.04,则github上还未提供已经编译好的AppImage,需要下载[linuxdeployqt源码](https://github.com/probonopd/linuxdeployqt自己在系统上进行编译后方可使用。

2.安装

方式一:利用下载编译好的linuxdeployqt-x86_64.AppImage 应用程序文件。下载好之后,将其改名为linuxdeployqt,并chmod +x,然后复制到 /usr/local/bin/。然后命令行输入 linuxdelpoyqt –version,查看是否安装成功,若输出版本信息表示安装成功。

$ chmod +x linuxdeployqt-x86_64.AppImage
$ mv linuxdeployqt-x86_64.AppImage linuxdeployqt
$ mv linuxdeployqt /usr/local/bin
$ linuxdelpoyqt --version
#输出的版本信息
linuxdeployqt 5 (commit 37631e5), build 631 built on 2019-01-25 22:47:58 UTC

方式二:编译源码。
首先默认已经安装好了g++、git等工具,如果没有的话得先安装。还需要安装 patchelf 工具,命令如下:

sudo apt install patchelf

gitclone源码(建议一定要使用命令行,直接download的会编译失败)

git clone https://github.com/probonopd/linuxdeployqt.git
#进入linuxdeployqt文件夹,命令如下:
cd linuxdeployqt
#修改 tools/linuxdeployqt/main.cpp 源代码,注释掉源码中版本判断的语句。
gedit tools/linuxdeployqt/main.cpp

之后右键linuxdeployqt文件夹,使用QT Creator打开,配置工程后在release模式下进行编译,可以得到linuxdeployqt的二进制文件,路径为(tools/linuxdeployqt/linuxdeployqt)。

#进入二进制文件所在路径
cd ./tools/linuxdeployqt
#赋予可执行权限
sudo chmod a+x linuxdeployqt
#为了方便之后使用,可以将该可执行文件复制到 /usr/local/bin 目录下:
sudo cp linuxdeployqt /usr/local/bin/

二.安装appimagetool

linuxdeployqt命令要用到选项 -appImage,因此需要安装一下 appimagetool,下载和安装命令如下:

sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool
sudo chmod a+x /usr/local/bin/appimagetool

三.配置 qt 的环境变量

终端输入vim ~/.bashrc命令,修改 .bashrc 文件,在文件末尾追加以下内容,其中/opt/Qt/5.15.0是我的Qt安装路径,大家要用自己的路径代替:

#add QT ENV
export PATH=/opt/Qt/5.15.0/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/opt/Qt/5.15.0/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/opt/Qt/5.15.0/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/opt/Qt/5.15.0/gcc_64/qml:$QML2_IMPORT_PATH

最后要source一下使 ~/.bashrc 这个shell文件立即生效,而不必注销并重新登录。

$ source ~/.bashrc

四.运行linuxdeployqt命令,进行打包

1.运行Qt生成release版本的可执行文件,勾选了“shadow build”,所以示例用的是"build-自己的工程名称-Desktop_Qt_5_15_0_GCC_64bit-Release"文件夹下的自己的工程名称可执行文件;
2.创建一个文件夹,名称最好是用可执行文件的名称,然后将自己的工程名称可执行文件复制到此文件夹下;
3.使用 linuxdeployqt 进行打包,一定要加上-appimage选项,命令如下:

$ linuxdeployqt  自己的工程名称  -appimage
到这里会出现几个问题:

问题一:lib*.so.1 => not found,类似此类的输出,说明该动态链接库找不到,可以进行如下操作。

#先查看二进制文件所依赖的动态库文件有哪些
$ldd #二进制文件的名称
#找到所依赖的库文件的路径,并添加到/etc/ld.so.conf
#例如.so库文件的路径在/usr/lib/x86_64-linux-gnu,就在/etc/ld.so.conf文件中加上/usr/lib/x86_64-linux-gnu,缺少哪个库就添加哪个库的路径
$sudo vim /etc/ld.so.conf
#保存配置文件后,使用下面的命令使其生效
$sudo /sbin/ldconfig

问题二:在问题一的基础上,还会提示缺少依赖库,但通过ldd查询却没有该依赖库,此时可以去考虑百度搜索该库的名称,看是否缺少该库对应的软件包。例如我提示的是libpq.so.5 notfound,通过搜索发现该依赖库属于postgresql,通过如下命令进行安装

$sudo apt install postgresql
#通过该命令取查找库文件的路径
$sudo find / -name libpq.so.5

最后像问题一中一样添加路径并使其生效。
问题三:在问题一中使配置生效的一步中,可能会提示类似“*libcudnn.so.5 不是符号连接”的问题,那么可以如下方式解决。重新建立链接并删除原链接。
首先找到usr/local/cuda-8.0/lib64/目录(libcudnn所在目录),搜索 libcudnn 然后发现两个文件libcudnn.so.5 和libcudnn.so.5.0.5 理论上只有一个libcudnn.so.5.0.5

#终端执行
$ln -sf /usr/local/cuda-8.0/lib64/libcudnn.so.5.0.5 /usr/local/cuda-8.0/lib64/libcudnn.so.5
#再进行
$sudo ldconfig

这时候会发现usr/local/cuda-8.0/lib64/目录下只有libcudnn.so.5.0.5 文件了,libcudnn.so.5消失了。这个问题就可以解决了。

五.打包后的处理

1.如果在执行完$ linuxdeployqt 自己的工程名称 -appimage命令以后,出现如下内容(还有提示图标或者其他库的问题的可以忽略,只要看到下面的输出,就说明成功了):

Categories entry not found in desktop file
.desktop file is missing a Categories= key

此时会生成AppRun文件,./AppRun或者./自己工程的二进制文件都可以运行,如果项目运行用到了本地文件,也要放到二进制文件所在的目录里面才能保证项目的正常运行。

六.使其像应用程序一样可以启动

1.首先刚刚linuxdeployqt执行完之后,会生成default.desktop文件,使用vim对其进行编辑,内容如下

[Desktop Entry]
Version=app的版本
Name=app的名字
Comment= 说明信息 
Exec=app的执行路径,绝对路径
Icon=icon 路径,绝对路径
Terminal=false #是否在终端启动
Type=Application
Categories=Utility;Application;

之后赋予权限

chmod a+x default.desktop

这时就可以直接双击运行了(提示信任时,直接点击信任即可,这时会发现图标和名称也变了)。

注:这里自定义生成.desktop文件可以复制到/usr/share/applications中,这样应用程序中就可以有改程序;.desktop文件无论复制到什么路径下都可以执行,且项目运行的当前路径为主目录(比如,工程中有数据库操作,那么生成的数据库文件就会在主目录,同理,工程依赖的资源文件,也要放在主目录)。

上述内容参考:
1.在Linux下使用linuxdeployqt发布Qt程序
2.ubuntu18.04通过linuxdeployqt打包Qt5.0项目
3.ldd * -> not found
4.解决*.so不是符号连接
5.加载共享库时出错

还可以尝试不使用linuxdeployqt
Qt实用技巧:ubuntu发布程序打包流程(解决插件xcb加载失败)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354