Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录

Linux 环境下Qt开发的摄像头程序用到了opencv的库,需要跟Qt环境一起打包。

1.打包所有关联库用的是脚本程序。

#!/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

2.新建空文件夹放入编译好的release qt程序,比如摄像头程序 camera,新建打包脚本copylib.sh放在文件夹下。

 Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第1张图片

3.终端执行 ./copylib.sh camera 会打包 camera程序所需的关联库。

4.完了会生成lib文件夹,把lib文件夹所有文件剪切到camera同级目录下,然后把lib文件夹删除。

 Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第2张图片

lib里脚本也会把opencv用到的库也一起打包了

Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第3张图片

5.camera同级目录下新建名称为platforms的文件夹,运行Qt程序还需要 xcb的库,需要去Qt安装目录 /opt/Qt5.12.2/5.12.2/gcc_64/plugins/platforms 里面的 libqxcb.so 拷贝到 platforms文件夹下。

 Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第4张图片

6.新建运行程序的脚本,跟程序同名,camera.sh,放到camera同级目录下。

#!/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 "$@"

 Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第5张图片

7.到此按理说是可以运行的,但是放到其他机器下执行 ./camera.sh 会报错 xcb有问题。

 Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第6张图片

8. 打开Qt debug 详细问题显示,执行 export QT_DEBUG_PLUGINS=1,然后再运行就会看到详细报错。

 Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第7张图片

如上,是报错 libQt5XcbQpa.so.5 这个库文件找不到,文件夹下一起确实没有,就需要去Qt安装目录 /opt/Qt5.12.2/5.12.2/gcc_64/lib下 复制出来放到文件夹下。一定用命令 sudo cp .....复制,不要用鼠标操作,不然文件移动权限不够。

9.再次执行 ./camera.sh,同样报错libQt5DBus.so.5库找不到。也是同上一步,复制出来。

Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第8张图片

Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第9张图片

10.再次执行 ./camera.sh,这次就没问题了

Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录_第10张图片

 

 

 

 

 

你可能感兴趣的:(linux,qt)