热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎么在linux下打包免安装的QT程序。

近期,因为项目的需求,得打包QT程序,并将程序放到没有安装QT库的电脑上运行。打包QT程序的方法有很多,主要分为以下几种:1.打包成安装包形式:2.打包成二进制文件,附带运行库的形式

近期,因为项目的需求,得打包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中写入以下的内容。

#!/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

复制文件的技巧: *(代表所有的文件)


推荐阅读
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
author-avatar
亲亲宝贝的夏天狂想曲_540
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有