QT ldd 方法 打包跨 Linux 无QT环境应用
1. 新建一个文件夹 准备 ldd 输出脚本和应用运行脚本
# ldd.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
# xxx.sh 应用运行脚本 !!!!!!!! 脚本名字与 QT release 生成的应用名字一致
#!/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 "$@"
2. 给两个脚本添加可执行权限
sudo chmod 777 ldd.sh
sudo chmod 777 xxx.sh // !!!!!!!! 脚本名字与 QT release 生成的应用名字一致
3. 新建一个存放打包应用的文件夹
4. 将 ldd.sh 复制到 QT 编译的 release 目录
# 执行
./ldd.sh xxx
之后将 lib 文件复制到第三步创建的文件夹中
# 执行
./ldd.sh libqxcb.so
之后将 lib 文件复制到第三步创建的文件夹中
7. 将 xxx.sh 复制到第三步创建的文件夹中,运行脚本
8. 如果跨 linux 段错误,删除公有库,如果不知道哪些是,可将除QT外的库拷贝到另一个文件夹中,运行程序,差什么加什么。