Qt+Ubuntu20.04:打包qt

打包程序

方法一:(可以运行,但有报错Segmentation fault (core dumped))

参考

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修改了)直至没有类似报错。

方法二:linuxdeployqt (可行)

参考

使用linuxdeployqt在linux下进行Qt打包发布(超详细)-CSDN博客

根据上述参考安装linuxdeployqt

1. 下载linuxdeployqt

下载linuxdeployqt-x86_64.AppImage

下载地址:

https://github.com/probonopd/linuxdeployqt/releases

2. 安装linuxdeployqt

为了我们后面使用时,方便一点,我们把这长长的名字改短点吧:

mv linuxdeployqt-6-x86_64.AppImage linuxdeployqt

然后修改为可执行权限

chmod 777 linuxdeployqt

再把这个可执行文件扔进/usr/local/bin目录,这样,我们就可以在其他目录访问了

mv linuxdeployqt /usr/local/bin

测试是否安装成功

linuxdeployqt --version

输出版本信息,表示安装成功。

在这里插入图片描述

3. Qt库路径设置到环境变量

在这里插入图片描述根据参考来,这里我qmake -v能查看到类似上图的结果,我就跳过了这一步。

4. 拷贝依赖文件

拷贝前,确认生成的是Release版本的程序,这个是常识。

我们在根目录下建立TestSetup目录,用于放置打包相关的文件;

并在TestSetup下继续建个Test目录,用来装Test应用及拷贝文件。

mkdir TestSetup
cd TestSetup
mkdir Test

把我们的应用Test(这个Test就是你自己的项目)拷贝到Test目录下

在这里插入图片描述

使用命令执行依赖文件拷贝

linuxdeployqt Test -appimage

终端报错(不用管它,是关于桌面文件的,后面我们直接编辑它。)

在这里插入图片描述

一会后,/TestSetup/Test目录下,已经把依赖全部拷贝好了。

在这里插入图片描述

我们可以看到创建了lib等目录。

需要说明的是,在执行“linuxdeployqt Test -appimage”命令时,其实除了拷贝依赖文件外,还对目标文件Test进行了修改,在Test中插入了一些库路径信息。

经过本人对前后2个文件内容的对比测试,至少是添加了lib目录的,其他没试过。

所以,你只需要把程序依赖的so文件放入lib目录下,无论是显式、隐式加载的so,都是可以搜索到的。

若你的应用中还有其他,如配置文件等资源,那么手动拷贝到你自己代码指定的目录下。

重要提示:

  • 因为linuxdeployqt将在内部使用ldd命令,来确定从何处将库复制到包中。ldd命令本身只能查找隐式加载的so,故若程序中代码使用显式加载的so,它是找不到的,这时需要开发者自己去保证显式加载so的路径可被搜索。
  • 举个例子:若存在程序A显式加载B.so,B.so隐式加载C.so,则对程序A使用linuxdeployqt拷贝依赖时,程序A的间接依赖文件C.so,将不会被拷贝。当程序跑起来加载B.so时,就会报找不到C.so的错误。这一点尤其需要注意。此时我们需要再对B.so使用一次linuxdeployqt拷贝依赖。这样程序A加载B.so,B.so加载C.so,就都可以找到了。、

5. 测试应用能否正常运行

此时,一个完整的运行环境已经具备了,我们测试一下。

重新开一个终端,在该终端的环境变量中去掉Qt库相关的路径,修改后的环境变量只对该终端生效,然后我们执行应用,看能否运行。

操作过程:先用export查看有哪些环境变量设置了Qt路径。

export

如果本教程之前没有配置过qt环境变量,那么结果应该和.bashrc文件我们追加的内容一致的。

然后把这些环境变量中Qt路径去掉(这里,我并没有遇到参考文章中说的,可能是因为我没有执行第三步)
测试启动应用

./Test

此时如果不出意外,应该可以正常启动。

如果有意外,那就根据实际情况,先把问题解决,再继续。

到这里就已经可以了,后面我就没有再看了。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Ubuntu 20.04上安装Qt,可以按照以下步骤进行操作: 1. 安装必要的软件包:首先需要确保已安装gcc和g++。可以通过在终端中运行`gcc -v`和`g++ -v`来检查它们是否已安装。如果没有安装,可以使用以下命令进行安装: ``` sudo apt install gcc g++ ``` 2. 安装clang编译器:运行`clang -v`命令检查是否已安装clang编译器。如果未安装,可以使用以下命令进行安装: ``` sudo apt install clang ``` 3. 安装make和cmake:确保已安装make和cmake。可以使用以下命令进行安装: ``` sudo apt install make cmake ``` 4. 安装Qt5组件:使用以下命令安装Qt5的组件: ``` sudo apt-get install build-essential qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools ``` 5. 安装Qt Creator:可以使用以下命令安装Qt Creator: ``` sudo apt-get install qtcreator ``` 6. 安装Qt:最后,可以使用以下命令安装Qt: ``` sudo apt-get install qt5* ``` 这样,你就在Ubuntu 20.04上成功安装了Qt。如果下载速度较慢,你可以考虑更换软件源来加快下载速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Ubuntu20.04安装QT并配置开发环境](https://blog.csdn.net/willhu2008/article/details/121826243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [QT5 安装(Ubuntu20.04) 详细](https://blog.csdn.net/weixin_48560325/article/details/124373125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值