1.找个位置新建空文件夹Progream,存放打包后的文件;
2.将Qt项目用Release模式编译运行一遍,确保在shadow目录下生成可执行程序 Progream;
shadow目录
3.在shadow目录中新建脚本copylib.sh;
#!/bin/bash
LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o “/." | grep -o "/./[1]*”))
$(mkdir $LibDir)
for Variable in
l
i
b
a
r
r
a
y
[
@
]
d
o
c
p
"
{lib_array[@]} do cp "
libarray[@]docp"Variable" $LibDir
done
4.在Terminal中,通过指令赋值权限 ;
sudo chmod 777 copylib.sh
5.在Terminal中,输入./copylib.sh progream
其中, giptables 是运行copylib.sh 脚本的参数,脚本实际上是调用了 ldd ocs指令获得ocs运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。
生成lib文件夹
6.将① progream的可执行程序、② lib文件夹里面全部的文件 复制到 Progream文件夹中;
7.将lib文件夹删除;
8.进入Qt的安装目录,找到platforms目录;
platforms目录位置
我的路径是:/home/book/Qt5.12.6/5.12.6/gcc_64/plugins/platforms
PS: Terminal中输入pwd 是显示当前的绝对路径
9.将第3步的copylib.sh放到platforms目录中,并运行 ./copylib.sh libqxcb.so,这时也会得到一个lib文件夹 、libqxcb.so的库文件;
lib文件夹 、libqxcb.so的库文件
注:xcb是移植的重要文件,如果拷贝错误将不能在目标主机运行。
10.将platforms整个文件夹拷贝到Progream,并删除原先文件夹中的libxcb.so库文件夹;
拷贝platforms
疑问1:这里的原先文件夹是指Qt安装目录下的那个platforms文件夹吗?
疑问2:要删除的是 libxcb.so 文件吗?还是说作者本来想打的是 libqxcb.so 呢?
要删除这两个 libxcb 文件吗?
11.将拷贝后的库文件夹的东西全部放到SerialPort目录下。即将Progream/platforms/lib/* 拷贝到Progream下。并删除Progream/platforms/lib文件夹及其所属文件。
12.在Progream文件夹中新建脚本progream.sh
#!/bin/sh
appname=basename $0 | sed s,\.sh$,,
dirname=dirname $0
tmp="${dirname#?}"
if [ “KaTeX parse error: Expected '}', got 'EOF' at end of input: {dirname%tmp}” != “/” ]; then
dirname=
P
W
D
/
PWD/
PWD/dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
d
i
r
n
a
m
e
/
dirname/
dirname/appname “$@”
新建脚本
13.赋值赋值权限,chmod 777 progream.sh ;
14.到现在,可以将Progream文件夹拷贝到目标主机上运行了。在目标主机上运行程序是采用./progream.sh运行,而不是直接点击progream.
:space: ↩︎