说实话这个问题搞了好久,错误原因很简单,但是一开始没有往哪里想,这里总结一下,为后面再次弄得时候打个样
1、将可执行文件拷贝出来(和Windows下的exe相同的文件),放在一个新文件夹下面
2、生成pack.sh
脚本,用来导出需要的库文件(可以向通过ldd
命令查看要那些库文件)
#!/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
3、在QT安装目录下找到platforms
文件夹,在这个文件夹下通过终端
运行这个脚本,先将后面需要的动态库生成一下,否则后面会出问题(qt.qpa.plugin: Could not load the Qt platform plugin "xcb"
)
运行脚本的命令为
./pack.sh libqxcb.so
这个时候platforms
文件夹下会生成一个lib文件夹先不用管,后面用
4、然后将整个platforms
拷贝到存放可执行文件的文件夹中
5、这个时候同样使用第二步中的脚本,在存放可执行文件的目录下打开终端,运行命令
./pack.sh ****(这里指你的可执行文件名称)
6、此时先将本次lib
中的文件剪切或者复制都行,复制到可执行文件目录下
7、然后将platforms
文件夹下的lib
文件夹下的文件,复制或剪切到可执行文件目录下,若有同名的替换即可
8、这个时候生成和你可执行文件同名的脚本,(****.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 "$@"
9、此时还需要将你的plugins
下的部分依赖文件拷贝到可执行文件所在的文件夹下
10、这个时候就算大功告成,但是有一点需要注意,在运行前要将你的可执行文件和可执行文件的.sh脚本文件都通过终端赋值可运行权限,因为个人发现,如果通过U盘移动的话,赋值的权限就不在了,所以使用前赋值就可
chmod +x 可执行文件 可执行文件.sh