找回密码
 立即注册
收起左侧

QT在linux上的发布,写给小白看的,老手略过

15
回复
12404
查看
[复制链接]
累计签到:615 天
连续签到:1 天
来源: 原创 2016-5-9 09:48:36 显示全部楼层 |阅读模式

我也是个小白,以前在win上发布Qt程序感觉很easy,Release了之后,到目录下运行exe文件,提示缺什么dll就拷贝什么dll到目录下就好了。linux上大致相同,但是还是有些许的区别的。

1.linux上Release了之后,也是缺库 ,缺的是  .so  的库
2.linux上不会提示缺什么库,自己查
3.linux上不仅要库,还要对应库的 软链接
4.修改环境变量,让路径指向当前目录下,运行shell脚本,而不是可执行变量

以上四条你可能都不明白,但是照着下边的做就ok了

1.用 “ldd 可行路径” 看你的程序都缺啥库   (就找那个"not found")
1.1新建一个txt,把这些粘贴进去
ln -s libicudata.so.53.1 libicudata.so.53ln -s libicui18n.so.53.1 libicui18n.so.53
ln -s libicuuc.so.53.1   libicuuc.so.53
ln -s libQt5Core.so.5.4.1 libQt5Core.so.5
ln -s libQt5DBus.so.5.4.1  libQt5DBus.so.5
ln -s libQt5Gui.so.5.4.1 libQt5Gui.so.5
ln -s libQt5Widgets.so.5.4.1 libQt5Widgets.so.5
(PS:这些都是最基本的库,一般都会缺这些玩意,如果你的程序还用到其他的,照这个格式再写上去。)

1.2 然后后缀改成 .sh,在终端输入  sh ./XXX.sh就可以了  你会发现你的目录下多了很多带箭头的文件,每个库都对应有一个。
这其实就是建立的软链接

2.在建一个跟你工程同名的txt文档,把这段复制进去,换成你路径。 然后 同样后缀改成 .sh
2.1#--------------------------
env |grep LIB
export LD_LIBRARY_PATH=.
export QT_PLUGIN_PATH=你的路径/platforms
export LD_LIBRARY_PATH=你的路径/platformsLD_LIBRARY_PATH
#--------------------------
#!/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.2 把platforms拷贝到你的工程目录下

2.3同样运行刚才这个.sh 好了,这个时候你能程序应该能起来了。

3.为了方便,我把“platforms”  “第一sh(CreateSoftLink.sh)”  "第二sh(你的工程名.sh)"   。“platforms”  “第一sh(CreateSoftLink.sh)”直接用就好了。至于“你的工程名.sh”把汉字部分换成你的“工程名”“路径”就可以了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

尚未签到

2016-5-10 22:28:37 显示全部楼层
so在哪好像没关系的吧,export LD_LIBRARY_PATH = /path/LD_LIBRARY_PATH && 可执行文件

一行搞定

点评

发布到没有装QT 的机器上,so不得自己指定路径吗?而且,我试了一下,感觉必须是得有.so的软链接,要不然就算是指定到了有.so的目录,也还是不认。  详情 回复 发表于 2016-5-11 11:32
回复 支持 反对

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-5-11 11:32:40 显示全部楼层
Joey_Chan 发表于 2016-5-10 22:28
so在哪好像没关系的吧,export LD_LIBRARY_PATH = /path/LD_LIBRARY_PATH && 可执行文件

一行搞定 ...

发布到没有装QT 的机器上,so不得自己指定路径吗?而且,我试了一下,感觉必须是得有.so的软链接,要不然就算是指定到了有.so的目录,也还是不认。

点评

很多我也不懂,这块小白一枚,大哥,可否指点一下,我也明白下为啥这么要这么做 嘿嘿  详情 回复 发表于 2016-5-11 11:34
回复 支持 反对

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-5-11 11:34:56 显示全部楼层
qq1043068972 发表于 2016-5-11 11:32
发布到没有装QT 的机器上,so不得自己指定路径吗?而且,我试了一下,感觉必须是得有.so的软链接,要不然 ...

很多我也不懂,这块小白一枚,大哥,可否指点一下,我也明白下为啥这么要这么做  嘿嘿
回复 支持 反对

使用道具 举报

尚未签到

2016-5-11 21:30:08 显示全部楼层
我记得好像Linux默认动态库的地址是 /usr/lib, 如果不指定,程序就默认只在这里找动态库。

还有一个系统级的静态配置文件可以指定动态库地址,在哪忘记了,搜一下就有。

如果只在用户态下指定动态库,export LD_LIBRARY_PATH 后面跟着可执行文件即可

点评

对啊,可是就是算是export LD_LIBRARY_PATH 但是还是要给动态链接库建立软连接。  详情 回复 发表于 2016-5-12 09:41
回复 支持 反对

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-5-12 09:41:29 显示全部楼层
Joey_Chan 发表于 2016-5-11 21:30
我记得好像Linux默认动态库的地址是 /usr/lib, 如果不指定,程序就默认只在这里找动态库。

还有一个系统级 ...

对啊,可是就是算是export LD_LIBRARY_PATH    但是还是要给动态链接库建立软连接。
回复 支持 反对

使用道具 举报

尚未签到

2016-5-13 00:36:31 显示全部楼层
qq1043068972 发表于 2016-5-12 09:41
对啊,可是就是算是export LD_LIBRARY_PATH    但是还是要给动态链接库建立软连接。 ...

这么神奇?我用了这么多年linux没见过还要建软链接才能用动态库的,系统里面的软链接只是为了软件包兼容而已。

话说你什么系统哦

点评

ubuntu ,,,,,,,,也可能是**作的问题吧,过几天我试试不建立软连接。。呵呵  详情 回复 发表于 2016-5-13 13:13
回复 支持 反对

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-5-13 13:13:11 显示全部楼层
Joey_Chan 发表于 2016-5-13 00:36
这么神奇?我用了这么多年linux没见过还要建软链接才能用动态库的,系统里面的软链接只是为了软件包兼容 ...

ubuntu ,,,,,,,,也可能是**作的问题吧,过几天我试试不建立软连接。。呵呵
回复 支持 反对

使用道具 举报

累计签到:955 天
连续签到:1 天
2016-6-16 08:10:46 显示全部楼层
虽然我不明白你们在说什么,但是听起来很牛的样子。
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-8-4 10:51:09 显示全部楼层
其实只要 你编译安装的路径在哪  直接把 库文件 复制到那个目录下就行了 不用指定路径也行
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2016-8-11 10:56:28 显示全部楼层
挺不错的,备份一下。
我也是个小白,以前在win上发布Qt程序感觉很easy,Release了之后,到目录下运行exe文件,提示缺什么dll就拷贝什么dll到目录下就好了。linux上大致相同,但是还是有些许的区别的。

1.linux上Release了之后,也是缺库 ,缺的是  .so  的库
2.linux上不会提示缺什么库,自己查
3.linux上不仅要库,还要对应库的 软链接
4.修改环境变量,让路径指向当前目录下,运行shell脚本,而不是可执行变量

以上四条你可能都不明白,但是照着下边的做就ok了

1.用 “ldd 可行路径” 看你的程序都缺啥库   (就找那个"not found")
1.1新建一个txt,把这些粘贴进去
ln -s libicudata.so.53.1 libicudata.so.53ln -s libicui18n.so.53.1 libicui18n.so.53
ln -s libicuuc.so.53.1   libicuuc.so.53
ln -s libQt5Core.so.5.4.1 libQt5Core.so.5
ln -s libQt5DBus.so.5.4.1  libQt5DBus.so.5
ln -s libQt5Gui.so.5.4.1 libQt5Gui.so.5
ln -s libQt5Widgets.so.5.4.1 libQt5Widgets.so.5
(PS:这些都是最基本的库,一般都会缺这些玩意,如果你的程序还用到其他的,照这个格式再写上去。)

1.2 然后后缀改成 .sh,在终端输入  sh ./XXX.sh就可以了  你会发现你的目录下多了很多带箭头的文件,每个库都对应有一个。
这其实就是建立的软链接

2.在建一个跟你工程同名的txt文档,把这段复制进去,换成你路径。 然后 同样后缀改成 .sh
2.1#--------------------------
env |grep LIB
export LD_LIBRARY_PATH=.
export QT_PLUGIN_PATH=你的路径/platforms
export LD_LIBRARY_PATH=你的路径/platformsLD_LIBRARY_PATH
#--------------------------
#!/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.2 把platforms拷贝到你的工程目录下

2.3同样运行刚才这个.sh 好了,这个时候你能程序应该能起来了。

3.为了方便,我把“platforms”  “第一sh(CreateSoftLink.sh)”  "第二sh(你的工程名.sh)"   。“platforms”  “第一sh(CreateSoftLink.sh)”直接用就好了。至于“你的工程名.sh”把汉字部分换成你的“工程名”“路径”就可以了
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-8-26 17:23:25 显示全部楼层
你编译安装的路径在哪  直接把 库文件 复制到那个目录下就行了 不用指定路径也行
回复 支持 反对

使用道具 举报

累计签到:15 天
连续签到:1 天
2016-9-22 17:25:32 显示全部楼层
出现语法错误,未预期的文件结尾,这个应该怎么解决?
回复 支持 反对

使用道具 举报

累计签到:15 天
连续签到:1 天
2016-9-22 18:30:21 显示全部楼层
能把你成功移植的可执行文件和库一起发上来么?成功的例子,没有改动的例子。
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-9-25 20:05:20 显示全部楼层
  谢谢!!:lol:lol:lol
回复 支持 反对

使用道具 举报

累计签到:234 天
连续签到:1 天
2016-9-29 09:22:14 显示全部楼层
谢谢,挺有用的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了