转载自: http://blog.csdn.net/hjl_1991/article/details/50365927
程序以test为例:
这里提供一个脚本将ldd打印出来的依赖库复制到指定路径:
#!/bin/sh
exe="test" #发布的程序名称
des="/home/hejianglin/QtProject/build-test-Desktop-Release/ReleaseTest" #你的路径
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
说明:exe :要发布的程序名称 des:指定复制的路径
5. 编写.sh文档 并将它放在与步骤4同一目录下(.sh文件命名必须与可执行文件名字一样例:可执行文件名 test, .sh 文件名为 test.sh)
.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 "$@"
6. 执行这个.sh文件:
可能因为不行执行需更改权限:
chmod +x test.sh
Ok!大功告成,将这个文件复制到其他电脑上就可以运行了。
注:
Linux 版本:Ubuntu 14.04 LTS
Qt:5.2.1
7. 遇到的问题与解决方法:(此部分非转载,属于实际总结)
原因:是在win下操作的时候,修改到了此文件。在win下编辑的时候,换行结尾是\n\r , 而在linux下 是\n,所以才会有多出来的\r.
解决方法:完全在Linux 系统中重新创建sh文件.
参考:http://blog.csdn.net/liuqiyao_01/article/details/41542101
(2)运行第一个sh文件时,提示des定义的路径不存在,但我给出的des="~/home/code"是确实存在的
原因:des路径是一个相对路径前面要加上这个sh文件所在的工作目录,例如sh文件在 ~/home/code 时 ,des="data"指的des的实际路径就是"~/home/code/data".
解决方法:根据相对路径重新定义des
(3)运行ldd命令查找库文件时,显示部分so文件无法找到路径
解决方法:1~6步骤利用可执行文件打包程序时,程序可执行文件不要拿出程序编译时产生的build文件夹,否则可能造成部分so文件的路径无法找到.也就是上面的操作要在build文件夹中执行,不改变可执行文件的位置.
解决方法:参考 http://blog.csdn.net/braveyly/article/details/14005191
http://blog.csdn.net/braveyly/article/details/14005191
(5)注意第二个sh文件运行是,这个sh文件和程序执行文件以及前一步提取到的so库文件需要在同一个文件夹中.