在Linux 下如何打包免安装的QT程序
2018-04-02 10:57
429 查看
如题,近期因为项目需求,得打包QT程序,并将程序放到没有安装QT库的电脑上运行。网上索罗了下,打包QT程序的方式很多,主要分为以下几种:
1. 打包成安装包形式;
2. 打包成二进制文件,附带运行库的形式:
- windows下,有很多工具,教程也比较多,运行库基本是dll文件
- linux下,需要靠脚本协助,很多教程都不完整,运行库基本是so文件
笔者这里只演示如何在linux下打包免安装程序,程序名称为giptables,QT版本是5.7.1,以下如出现这个名称,则一律替换成读者自己的应用程序名称。
0、找个地方,比如桌面,创建空文件夹
1、先将工程使用Release模式编译
2、打开编译输出文件的文件夹(带二进制文件giptables的那个)
笔者的文件夹名称是build-giptables-Desktop_Qt_5_7_1_GCC_64bit-Release3、在上一步的文件夹中新建文件copylib.sh,通过指令设置权限
4、在 copylib.sh 中加入内容
2
3
4
5
6
7
8
9
10
11
12
13
14
5、打开终端并进入到当前文件夹,输入
其中,
6、将
7、进入QT的安装目录,找到
~/Qt5.7.1/5.7/gcc_64/plugins/platforms
将整个
ps:为什么是libqxcb.so呢?具体看文末的参考资料,这个跟你要运行的程序有关,需要用到哪些QT的库,就再打包对应的东西。
9、将
10、在
2
3
4
5
6
7
8
9
10
11
12
13
到这里就基本完成了,将
过程中遇到的问题:
1、运行
2、在目标主机中提示
This application failed to start because it could not find or load the Qt platform plugin “xcb”这是因为没有生成
2
3
4
5
6
步骤8有问题, 应该是在步骤7的时候, 复制copylib.sh到~/Qt5.7.1/5.7/gcc_64/plugins/platforms ,然后执行copylib.sh, 这样拷贝出来的lib就是全的,如果先把~/Qt5.7.1/5.7/gcc_64/plugins/platforms复制到Giptables,然后再执行copylib.sh, 这样会漏掉几个关键的库(比如libQt5DBus.so),这样会导致最后报 This application failed to start because it could not find or load the Qt platform plugin “xcb”
参考资料 http://doc.qt.io/qt-5/linux-deployment.html
版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! https://blog.csdn.net/z3512498/article/details/64922180
1. 打包成安装包形式;
2. 打包成二进制文件,附带运行库的形式:
- windows下,有很多工具,教程也比较多,运行库基本是dll文件
- linux下,需要靠脚本协助,很多教程都不完整,运行库基本是so文件
笔者这里只演示如何在linux下打包免安装程序,程序名称为giptables,QT版本是5.7.1,以下如出现这个名称,则一律替换成读者自己的应用程序名称。
0、找个地方,比如桌面,创建空文件夹
Giptables,这个将用来存放giptables程序的运行文件
1、先将工程使用Release模式编译
2、打开编译输出文件的文件夹(带二进制文件giptables的那个)
笔者的文件夹名称是build-giptables-Desktop_Qt_5_7_1_GCC_64bit-Release3、在上一步的文件夹中新建文件copylib.sh,通过指令设置权限
chmod 777 copylib.sh
4、在 copylib.sh 中加入内容
#!/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 done1
2
3
4
5
6
7
8
9
10
11
12
13
14
5、打开终端并进入到当前文件夹,输入
./copylib.sh giptables
其中,
giptables是运行copylib.sh 脚本的参数,脚本实际上是调用了
ldd giptables指令获得
giptables运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。运行完上述指令后,同目录下会生成lib文件夹,这里我们将其称作
giptables的库文件夹,避免与下文内容混淆
6、将
giptables的二进制文件和
giptables的库文件夹里所有的文件复制到
Giptables文件夹中,注意:这里是把lib里的所有文件复制出来,不用复制lib文件夹
7、进入QT的安装目录,找到
platforms文件夹,笔者的路径是
~/Qt5.7.1/5.7/gcc_64/plugins/platforms
将整个
platforms文件夹复制到
Giptables文件夹中,注意:这时复制的是整个文件夹,这使得
Giptables文件夹中会多出一个
platforms文件夹8、将上文的
copylib.sh放到
Giptables/platforms/中,并运行
./copylib.sh libqxcb.so,这时会得到lib文件夹——
libqxcb.so的库文件夹
ps:为什么是libqxcb.so呢?具体看文末的参考资料,这个跟你要运行的程序有关,需要用到哪些QT的库,就再打包对应的东西。
9、将
libqxcb.so的库文件夹中的所有文件复制
Giptables文件夹中,然后删除掉
Giptables/platforms/lib文件夹
10、在
Giptables文件夹中新建脚本
giptables.sh,执行
chmod 777 giptables.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 "$@"1
2
3
4
5
6
7
8
9
10
11
12
13
到这里就基本完成了,将
Giptables文件夹复制到需要运行程序的目标主机即可,在目标主机中,运行程序,都采用
./giptables.sh而不是
./giptables,即运行程序的sh脚本,而不是二进制文件
过程中遇到的问题:
1、运行
copylib.sh时报找不到库的错误:必须保证在源文件夹中运行
copylib.sh,而不能先将文件复制出来,然后再运行
copylib.sh生成
lib
2、在目标主机中提示
This application failed to start because it could not find or load the Qt platform plugin “xcb”这是因为没有生成
libqxcb.so的库文件夹,或者没有将生成的文件夹中所有的文件放到
giptables.sh同一级目录下,笔者最后生成的目录结构如下
Giptables(文件夹) -- platforms(文件夹) -- libqxcb.so | \__ *.so | \__ giptables.sh \__ *.so1
2
3
4
5
6
步骤8有问题, 应该是在步骤7的时候, 复制copylib.sh到~/Qt5.7.1/5.7/gcc_64/plugins/platforms ,然后执行copylib.sh, 这样拷贝出来的lib就是全的,如果先把~/Qt5.7.1/5.7/gcc_64/plugins/platforms复制到Giptables,然后再执行copylib.sh, 这样会漏掉几个关键的库(比如libQt5DBus.so),这样会导致最后报 This application failed to start because it could not find or load the Qt platform plugin “xcb”
参考资料 http://doc.qt.io/qt-5/linux-deployment.html
版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! https://blog.csdn.net/z3512498/article/details/64922180
相关文章推荐
- 在Linux 下如何打包免安装的QT程序?
- linux qt 打包安装程序
- Linux打包免安装的Qt程序
- linux+Qt程序如何打包发布
- 怎么在linux下打包免安装的QT程序。
- 图解Linux下如何搭建C#开发环境(还能写C/C++/Java等程序,只要安装相应的插件和编译器即可)
- 教你如何将你的Qt项目打包安装在MeeGo系统中
- 制作Linux下程序安装包——使用脚本打包bin、run等安装包
- 教你如何将你的Qt项目打包安装在MeeGo系统中
- Windows Mobile 程序如何打包(制作安装程序)
- 教你如何将你的Qt项目打包安装在MeeGo系统中
- VS2005(C#)下如何打包安装卸载程序[转]
- 如何将你的Qt项目打包安装在MeeGo系统中
- Linux下如何发布Qt程序[转]
- 教你如何将你的Qt项目打包安装在MeeGo系统中
- 教你如何将你的Qt项目打包安装在MeeGo系统中
- 制作Linux下程序安装包——使用脚本打包bin、run等安装包
- VS2005(C#)下如何打包安装卸载程序[转]
- 教你如何将你的Qt项目打包安装在MeeGo系统中
- c#打包,如何让安装程序把一个文件夹拷贝到特定路径