Linux系统下qt工程打包 您所在的位置:网站首页 linux打包程序依赖库 Linux系统下qt工程打包

Linux系统下qt工程打包

2024-02-13 11:22| 来源: 网络整理| 查看: 265

😁

在Windows系统下,很容易就能将qt工程打包成一个单独的可执行程序,在任意Windows环境都能执行。在Linux系统编译出来的qt工程,就相对的没那么容易,网上教程繁多,这里我前前后后折腾了很久,终于弄到了可靠的方法。

准备

首先在Release模式下Run一遍

我们的程序名是navDebuggingTools,我们可以在build-navDebuggingTools-Desktop_Qt_5_12_9_GCC_64bit-Release目录下,打开终端,进入当前目录,输入命令

ldd navDebuggingTools

就可以知道我们这个程序的全部依赖库,即使用到一些不是Qt或Linux系统的库,也能获取到

这里第2条就是我额外安装的log4cplus日志库

ldd.sh

拉取依赖库,写个脚本会容易很多,就不用一个个去找

同样的,在build-navDebuggingTools-Desktop_Qt_5_12_9_GCC_64bit-Release目录下,创建该脚本

sudo vi ldd.sh

然后将下面内容复制到脚本当中

#!/bin/bash LibDir=$PWD"/lib" Target=$1 lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*")) $(mkdir $LibDir) for Variable in ${lib_array[@]} do cp "$Variable" $LibDir done

接着给脚本添加权限

sudo chmod 777 ldd.sh

拉取依赖库 1.程序依赖库

打开终端,进入到脚本所在目录,执行命令

./ldd.sh navDebuggingTools

就会得到一个lib文件夹

这时,我们将lib文件夹中的文件,以及navDebuggingTools程序放进一个新的文件夹,以便后续管理

在这里插入图片描述

2.Qt依赖库

将ldd.sh脚本复制到Qt安装目录的platforms文件夹中,执行./ldd.sh libqxcb.so,将会获得一个lib文件夹

把整个platforms文件夹复制到之前新建的文件夹nav中, 然后将其中lib文件夹内的文件剪切到nav中,重复的依赖库选择替换即可

在这里插入图片描述

到此时,就可以双击navDebuggingTools程序,运行起来

在其他机器运行

把整个文件夹nav,移动到其他新的未安装任意环境的Linux系统下,是没办法直接运行的

听公司同事说,Windows下,运行程序navDebuggingTools的话,系统会从程序所在目录找寻依赖库,而从我之前在Windows中打包qt工程的经历来说,确实是这样,也就是说,依赖库和程序在同一目录,就可以双击执行程序 而在Linux下,则不是这样。所以需要一些额外的操作

步骤

进入到/etc/ld.so.conf.d目录内,创建一个和程序同名的.conf文件将程序所在路径添加到该文件中最后执行命令sudo ldconfig刷新连接

注意事项

第一步: 这里有一个省力的操作,因为/etc内有很多文件和文件夹,找ld.so.conf.d文件夹可能有点麻烦

进入/etc文件夹,打开终端,输入cd ld.,按一下Tab键,就能完整文件夹名ld.so.conf.d 然后执行sudo vi navDebuggingTools.conf

第二步: 将nav文件夹所在路径,最后加个/,然后写到navDebuggingTools.conf文本中; 例如:/home/saite/nav/

在这里插入图片描述

第三步: 一定要sudo

做完这三步之后,就可以双击运行程序啦

写成脚本

写个脚本nav_ldconfig.sh,一条命令./nav_ldconfig.sh就完成上面三步

tar=$PWD"/navDebuggingTools.conf" echo $PWD"/" >> $tar sudo mv $tar "/etc/ld.so.conf.d/" sudo ldconfig

网上还找到了个脚本,可以不需要上面三步直接运行程序,但每次想要运行程序,都要执行这个脚本

脚本必须和程序同名,且在同一目录下

navDebuggingTools.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 "$@"

开权限

sudo chmod 777 navDebuggingTools.sh

然后要运行程序时,执行命令

./navDebuggingTools.sh


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有