怎么在linux下打包免安装的QT程序。
2017-10-22 21:42
405 查看
近期,因为项目的需求,得打包QT程序,并将程序放到没有安装QT库的电脑上运行。
打包QT程序的方法有很多,主要分为以下几种:
1.打包成安装包形式:
2.打包成二进制文件,附带运行库的形式;
==Windows下,有很多的工具,教程也比较多,运行库基本是dll文件
==linux下,需要靠脚本协助,很多教程都不完整,运行库基本是so文件
这里演示在linu文件下打包免安装的程序,程序名称叫giptables,QT版本是5.6.0,以下如出现这个名字,一律换成读者自己的应用程序名称。
1.找个地方,将用来存放比如桌面,创空文件夹Process,这个文件夹程序的运行文件。
2.先将工程使用Release模式编译
3.打开编译输出文件的文件夹(带二进制文件giptables的那个)
一般如果在创建项目时勾选了shadow选项的,编译生成的文件存放在build–文件夹中
如果没有勾选,编译生成的文件被放在了源文件夹中。
4.在编译生成的文件中新建一个脚本文件 install.sh,通过指令chmod 777 install.sh
5.向install.sh中写入以下的内容。
6.打开终端进入到当前文件夹,输入./install.sh
process(此处为可执行程序的名字)
运行完上述的指令后,同目录下会生成lib文件夹,这里我们将其称作process的库文件夹中,注意:这里是把lib里面的文件复制出来,并放到自己创建的文件夹的名字里面,不用复制lib文件夹。
7.进入QT的安装目录,找到platforms文件夹,笔者的路径是:
/home/Qt5.6.0/gcc_64/plugins/platforms
将整个platform文件夹复制到process文件夹中,
注意此时复制的是整个文件夹,这使得process文件夹中会多出一个platform文件夹
8.将上文的install.sh文件放到process/platfroms/中,运行./install.sh libqxcb.so,这时会得到lib文件夹——libqxcb.so的库文件夹
9.将libqxcb.so的库文件夹中的所有文件复制到process文件夹中,然后删除process/platfroms/lib文件夹
10.在process文件夹中新建脚本文件
process(程序的名称).sh,执行chmod 777 process.sh,并将以下内容写入
这里我们已经制作完成了一个文件安装包,运行程序采用 ./process.sh的形式,即运行程序的sh脚本,而不是二进制文件
运行过程中的问题:
注意:1. 运行.sh时报找不到库的错误, 必须在源文件中运行install.sh,而不能先将可执行文件赋值出来,然后再运行install.sh生成lib
这是因为没有生成libqxcb.so的库文件,或者没有将生成的文件夹中所有的文件放到 process.sh同一级目录下。
1.Qt编译器: release ,build
2.创建Process文件夹,
3.在build中创建脚本文件install.sh, 运行脚本文件./install.sh process(程序名) 会生成lib库文件
4.将build/lib文件夹中的文件拷贝到Process文件夹中
5. 将Qt安装文件下的platfrom复制到Process文件夹中,并将install.sh放入,
运行./install .sh libqxcb.so 这时会得到一个lib文件,将lib中的文件都复制到 Process文件夹中,
也就是当前文件夹lib的上一级;
可以看出最终的文件夹层次结构是:
(1)……..so
Process (4) install.sh
(2) platfroms(文件夹)
(5) platfroms文件夹中本来的内容(*.sh)
(3)process.sh
复制文件的技巧: *(代表所有的文件)
打包QT程序的方法有很多,主要分为以下几种:
1.打包成安装包形式:
2.打包成二进制文件,附带运行库的形式;
==Windows下,有很多的工具,教程也比较多,运行库基本是dll文件
==linux下,需要靠脚本协助,很多教程都不完整,运行库基本是so文件
这里演示在linu文件下打包免安装的程序,程序名称叫giptables,QT版本是5.6.0,以下如出现这个名字,一律换成读者自己的应用程序名称。
1.找个地方,将用来存放比如桌面,创空文件夹Process,这个文件夹程序的运行文件。
2.先将工程使用Release模式编译
3.打开编译输出文件的文件夹(带二进制文件giptables的那个)
一般如果在创建项目时勾选了shadow选项的,编译生成的文件存放在build–文件夹中
如果没有勾选,编译生成的文件被放在了源文件夹中。
4.在编译生成的文件中新建一个脚本文件 install.sh,通过指令chmod 777 install.sh
5.向install.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 done
6.打开终端进入到当前文件夹,输入./install.sh
process(此处为可执行程序的名字)
其中,process是运行脚本install.sh脚本的参数, 脚本实际调用了ldd process指令时获得process运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。
运行完上述的指令后,同目录下会生成lib文件夹,这里我们将其称作process的库文件夹中,注意:这里是把lib里面的文件复制出来,并放到自己创建的文件夹的名字里面,不用复制lib文件夹。
7.进入QT的安装目录,找到platforms文件夹,笔者的路径是:
/home/Qt5.6.0/gcc_64/plugins/platforms
将整个platform文件夹复制到process文件夹中,
注意此时复制的是整个文件夹,这使得process文件夹中会多出一个platform文件夹
8.将上文的install.sh文件放到process/platfroms/中,运行./install.sh libqxcb.so,这时会得到lib文件夹——libqxcb.so的库文件夹
9.将libqxcb.so的库文件夹中的所有文件复制到process文件夹中,然后删除process/platfroms/lib文件夹
10.在process文件夹中新建脚本文件
process(程序的名称).sh,执行chmod 777 process.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 "$@"
这里我们已经制作完成了一个文件安装包,运行程序采用 ./process.sh的形式,即运行程序的sh脚本,而不是二进制文件
运行过程中的问题:
注意:1. 运行.sh时报找不到库的错误, 必须在源文件中运行install.sh,而不能先将可执行文件赋值出来,然后再运行install.sh生成lib
2.在目标机中提示
This application failed to start because it could not find or load the Qt platform plugin “xcb”
这是因为没有生成libqxcb.so的库文件,或者没有将生成的文件夹中所有的文件放到 process.sh同一级目录下。
1.Qt编译器: release ,build
2.创建Process文件夹,
3.在build中创建脚本文件install.sh, 运行脚本文件./install.sh process(程序名) 会生成lib库文件
4.将build/lib文件夹中的文件拷贝到Process文件夹中
5. 将Qt安装文件下的platfrom复制到Process文件夹中,并将install.sh放入,
运行./install .sh libqxcb.so 这时会得到一个lib文件,将lib中的文件都复制到 Process文件夹中,
也就是当前文件夹lib的上一级;
可以看出最终的文件夹层次结构是:
(1)……..so
Process (4) install.sh
(2) platfroms(文件夹)
(5) platfroms文件夹中本来的内容(*.sh)
(3)process.sh
复制文件的技巧: *(代表所有的文件)
相关文章推荐
- 在Linux 下如何打包免安装的QT程序
- Linux打包免安装的Qt程序
- 在Linux 下如何打包免安装的QT程序?
- linux qt 打包安装程序
- 制作Linux下程序安装包——使用脚本打包bin、run等安装包
- QT程序打包发布 - 免安装
- 如何使用vs对程序进行打包?怎么通过注册表获取安装路径?
- QT程序打包发布 - 免安装(MolePro Box)
- linux下qt的安装和一个最简单的小程序hello world
- C# winform程序怎么打包成安装项目(图解)
- 怎么把一个硬件的驱动程序打包到自己的应用程序的安装程序里
- Qt程序在windows 和 linux 下打包发布
- C# winform程序怎么打包成安装项目(图解)
- Qt 打包依赖 及发布安装程序
- linux+Qt程序如何打包发布
- Linux下Qt程序的打包发布
- QT程序打包发布 - 免安装
- QT程序打包发布 - 免安装
- C# winform程序怎么打包成安装项目(图解)
- 制作Linux下程序安装包――使用脚本打包bin、run等安装包