原文地址::https://blog.csdn.net/dieju8330/article/details/90675401
相关文章
1、Ubuntu下Qt程序的打包发布----https://blog.csdn.net/qq_34738528/article/details/107916578
2、ubuntu下如何打包Qt程序----https://blog.csdn.net/weixin_41865104/article/details/90678281
ubuntu16.04下打包发布Qt编译的程序
关于如何打包在利用qt编译的程序,一般都建议使用linuxdeployqt ,但是个人感觉这个东西不可靠,有几点:
库找不齐
如果你在此之前使用了apt-get install 安装qmake ,这个linuxdeployqt会自动选择你通过apt安装的qmake而不选择你从qt官网上下载安装的qt(大坑)
linuxdeployqt做的事情,我们可以手动完成
一、Qt下选择releaze编译程序
(1)新建一个qml程序
(2)选择release下编译运行
二、 开始打包
(1)找到release的文件夹,取里面的可执行文件,我这里是 qmltest
(2)将该可执行文件随便复制到一个新的目录下,该目录是我们打包的目录
(3)使用ldd查看一下,该可执行文件依赖什么库,齐不齐
(4)创建一个lib文件夹,用来存放这些ldd查找出来的库文件
mkdir lib
(5)在pack文件夹下,创建一个copy.sh文件,是个脚本,用来将ldd找到的库文件复制到lib文件夹下,
copy.sh内容如下
#! /bin/bash
#执行脚本时在终端输入 ./copy.sh ./test ./copy
#其中./test为ldd所要查看的可执行程序的路径,./copy为依赖文件最终拷贝到的文件夹路径
#以下三个参数为终端输入
# $0 为 ./copy.sh
# $1 为 ./test
# $2 为 ./copy
# awk 后 $0,$1,$2为终端日志的字符串,以空格为分隔符,只在awk本行起作用
#将字符串重定向到dependList
dependList=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )
#输出 ./test
#echo $1
#拷贝依赖
cp $dependList $2
#拷贝可执行程序
cp $1 $2
(6)在pack文件夹下,执行如下命令
sudo chmod +x copy.sh
./copy.sh qmltest ./lib/
执行完成之后,可以看到lib文件夹下已经有程序运行所需的库了,
这里需要删除一个库文件libc.so.6(不删除的话,复制到其他电脑上会出问题)
(7) 复制qt程序运行所需的插件
找到你Qt的安装路径,我这里是:
进入路径gcc_64
将plugins和qml两个文件夹复制到我们的打包目录pack下,
(8)编写qt.conf文件,这是个配置文件,用来告诉qt编译的程序,所需的库、插件这些去哪里找,
qt.conf文件内容如下:
[Paths]
Prefix = ./
Plugins = plugins
Imports = qml
Qml2Imports = qml
(9)到这里,打包完成
(10)双击可执行文件,即可运行
总结:
以上步骤7取的是冗余步骤,以确保不会漏库,实际上,可以自行删减没有用到的库或者插件
linuxdeployqt做的工作就是大概也就这样,但是它需要正确找到qmake,才能正常工作,否则,会报错如下:version `Qt_5_PRIVATE_API' not found (required by 或者 `Qt_5' not found (required by
以上是个人自行总结的方法,欢迎测试。
————————————————
版权声明:本文为CSDN博主「dieju8330」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dieju8330/article/details/90675401