Linux下Qt程序的打包发布和问题总结

转载自:     http://blog.csdn.net/hjl_1991/article/details/50365927



程序以test为例:

1. QtCreate使用Release版本编译

2. 从可运行程序的文件中拿出可执行文件,例:test

3. 终端下使用ldd命令查看需要的连接库,例:ldd test

4. 把ldd查询到的所有需要的库导出


这里提供一个脚本将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. 遇到的问题与解决方法:(此部分非转载,属于实际总结)


(1)运行sh文件时问题:   "$'\r':未找到命令"

原因:是在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文件夹中执行,不改变可执行文件的位置.

(2)运行第二个sh文件时出现问题: This application failed to start because it could not find or load the Qt platform plugin "xcb".
原因:未安装Qt的电脑上缺少libQt5DBus.so.5和Qt5/Tools/QtCreator/bin/plugins/platforms下的插件文件(libqxcb.so).

解决方法:参考   http://blog.csdn.net/braveyly/article/details/14005191

 http://blog.csdn.net/braveyly/article/details/14005191

(5)注意第二个sh文件运行是,这个sh文件和程序执行文件以及前一步提取到的so库文件需要在同一个文件夹中.

没有更多推荐了,返回首页