Qt+Ubuntu20.04:打包qt

news/2024/9/22 13:46:45/

打包程序

参考

qt项目在Linux平台上面发布成可执行程序.run_qt.run不是虚拟机的配置文件-CSDN博客

Linux下Qt程序的打包发布(1)-不使用第三方工具 - 知乎 (zhihu.com)

过程

1、Release编译

先将你的程序在release下编译通过,保证下面打包的程序是你最新的。

2、新建一个文件夹(作为你希望运行的文件目录)

3、找到SeerScriptHttp

在bin/release下找到与你程序同名的。

将这个文件复制到你新建的文件夹里。

4、新建文件pack.sh

在第三步的文件下,新建文件pack.sh,内容如下

#!/bin/sh  
exe="SeerScriptHttp" #你需要发布的程序名称
des="/home/xmuli/Desktop/temp/qwer" #创建文件夹的位置
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des

5、新建SeerScriptHttp.sh文件

在第三步的文件下,再新建一个SeerScriptHttp.sh文件(文件名必须与可执行文件名字一样), 文件内容如下(不需要修改):

#!/bin/sh  
appname=`basename $0 | sed s,\.sh$,,`  
dirname=`dirname $0`  
tmp="${dirname#?}"  
if [ "${dirname%$tmp}" != "/" ]; then  
dirname=$PWD/$dirname  
fi  
LD_LIBRARY_PATH=$dirname  
export LD_LIBRARY_PATH  
$dirname/$appname "$@"

我这里用了指定的appname:

#!/bin/sh  
appname=SeerScriptHttp  
dirname=`dirname $0`  
tmp="${dirname#?}"  
if [ "${dirname%$tmp}" != "/" ]; then  
dirname=$PWD/$dirname  
fi  
LD_LIBRARY_PATH=$dirname  
export LD_LIBRARY_PATH  
$dirname/$appname "$@"

6、运行pack.sh

在第二步的文件终端里运行

sudo chmod 777 pcak.sh //赋值权限
sed -i 's/\r$//' pcak.sh //如果你是从window直接把.sh写好拖入ubuntu需要经过这一步,其他的不用执行这一步sudo chmod 777 SeerScriptHttp.sh //赋值权限
sed -i 's/\r$//' SeerScriptHttp.sh./pack.sh 

会自动SeerScriptHttp.sh讲所有依赖全部放入你指定的文件夹里

7.运行

在你的新建文件夹目录下执行

./SeerScriptHttp

运行的时候遇到这样的错误

error while loading shared libraries: libQtHttpServer.so.1: cannot open shared object file: No such file or directory

解决方法:

先看一下libQtHttpServer.so.1这个文件是否存在

find . -name libQtHttpServer.so.1

文件存在

将这个文件从这个路径复制

cp ./scriptManager/SeerScriptHttp/bin/release/gcc_x64/libQtHttpServer.so.1 /usr/local/lib/

然后进入/etc/ld.so.conf修改如下

vim /etc/ld.so.conf###另起一行添加以下内容:
/usr/local/lib/###保存退出
:wq

然后让资源修改生效

ldconfig

然后再运行./SeerScriptHttp

如果还有上述报错,就继续重复上面的操作(这里就不用再进入/etc/ld.so.conf修改了)直至没有类似报错。


http://www.ppmy.cn/news/1450982.html

相关文章

Spring中实现策略模式的几种方式

Spring中实现策略模式的几种方式 一.背景 在写业务代码的时候,难免会遇到很多if-else,这个时候如果if-else不是很多可以用if-else。如果此时场景过多,太多的if-else会导致代码比较臃肿,所以这个时候就需要抽象化,将每…

从开通VPS到搭建宝塔面板全教程

因为学习需要,需要搭建一个宝塔面板。因为宝塔面板的可视化操作,丰富的功能和插件,极大的提高效率。想要学习搭建宝塔面板,最好单独整一台VPS,专门用于学习,以免影响其它VPS里面的功能。 一、开通VPS 因为…

link和@import的区别

Link 和 import 是 CSS 中的两种样式表引入方式。在网页设计中&#xff0c;样式表&#xff08;CSS&#xff09;是控制网页外观和布局的重要工具。 在引入样式表时&#xff0c;常见的方法包括使用 <link> 标签和 import 关键字。虽然它们都能实现相同的目标&#xff0c;但…

SQL数据库

一.什么是数据库 数据库&#xff1a;存储数据的仓库&#xff0c;数据是有组织的进行存储。&#xff08;database 简称DB&#xff09; 数据库管理系统&#xff1a;管理数据库的大型软禁&#xff08;DataBase Management System 简称DBMS&#xff09; SQL&#xff1a;操作关系…

学习Rust的第22天:mini_grep第2部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

Leetcode - 周赛395

目录 一&#xff0c;3131. 找出与数组相加的整数 I 二&#xff0c;3132. 找出与数组相加的整数 II 三&#xff0c;3133. 数组最后一个元素的最小值 四&#xff0c;3134. 找出唯一性数组的中位数 一&#xff0c;3131. 找出与数组相加的整数 I 本题本质就是求两个数组最小值的…

【跟马少平老师学AI】-【神经网络是怎么实现的】(六)过拟合问题

一句话归纳&#xff1a; 1&#xff09;过拟合问题&#xff1a; 图中的点为样本直线欠拟合曲线2过拟合 2&#xff09;迭代次数与拟合情况&#xff1a; 训练次数过多可能导致过拟合。 3&#xff09;正则化项法弱化过拟后问题&#xff1a; 加正则项&#xff0c;在最小化损失函数时…

Ieetcode——21.合并两个有序链表

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 合并两个有序链表我们的思路是创建一个新链表&#xff0c;然后遍历已知的两个有序链表&#xff0c;并比较其节点的val值&#xff0c;将小的尾插到新链表中&#xff0c;然后继续遍历&#xff0c;直到将该两个链表…