已经在Ubuntu上实测没有问题。
- 创建脚本 copylib.sh ,并执行 chmod 777 copylib.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 echo $Variable done
不过这样会包含大量的系统库,比较烦,可以只包含一些/usr/local/路径下的库:
#!/bin/bash LibDir=$PWD"/lib" Target=$1 lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*")) $(mkdir $LibDir) for Variable in ${lib_array[@]} do if [[ "$Variable" =~ ^/usr/local/.* ]]; then cp "$Variable" $LibDir echo $Variable fi done
- 使用 copylib.sh 脚本,在Qt编译出的可执行文件(为了方便,假设其名为TestProgram)的release文件夹下,执行 ./copylib.sh TestProgram ,得到其需要的动态库,在lib文件夹中。
- 使用 copylib.sh 脚本,在 Qt安装路径/5.12.2/gcc_64/plugins/plantforms 中,执行 ./copylib.sh libqxcb.so,得到 libqxcb.so 的依赖动态库,在lib文件中。
- 将所有得到的动态库以及TestProgram复制到要打包的文件夹中;
- 将 Qt安装路径/5.12.2/gcc_64/plugins 复制到要打包的文件夹中;
- 创建脚本 TestProgram.sh ,并 chmod 777 TestProgram.sh,运行程序执行 ./TestProgram.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 "$@"
-
对于需要使用了 QOpenGLWidget 的程序,需要将文件夹 Qt安装路径/5.12.2/gcc_64/plugins/xcbglintegrations 拷贝到要打包的文件夹中。