版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! https://blog.csdn.net/z3512498/article/details/64922180

如题,近期因为项目需求,得打包QT程序,并将程序放到没有安装QT库的电脑上运行。网上索罗了下,打包QT程序的方式很多,主要分为以下几种:

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-Release

3、在上一步的文件夹中新建文件copylib.sh,通过指令设置权限chmod 777 copylib.sh

4、在 copylib.sh 中加入内容

#!/bin/bash

LibDir=$PWD"/lib"

Target=$

lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))

$(mkdir $LibDir)

for Variable in ${lib_array[@]}

do

cp "$Variable" $LibDir

done

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 $ | sed s,\.sh$,,`

dirname=`dirname $`

tmp="${dirname#?}"

if [ "${dirname%$tmp}" != "/" ]; then

dirname=$PWD/$dirname

fi

LD_LIBRARY_PATH=$dirname

export LD_LIBRARY_PATH

$dirname/$appname "$@"

到这里就基本完成了,将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

\__ *.so

Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)

本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

Linux下同时运行不同版本的qt程序

因项目需要,可能有不同版本的qt程序要运行到同一台机器上,本次实验是qt4.8.5和qt5.3.1开发的程序同时运行在同一台机器上,此机器可以不按照qt的任何版本,当然,两个版本开发的qt与机器的位数 ...

linux下使用命令模式去编译Qt程序

1.打开终端输入,qmake -v ,如果提示版本信息正,就可以编译程序了. 2.当前目录切换到程序源代码目录,cd /home/likewei/untitled2 3.生成untitled2.pro ...

linux下mysql-5.5.15安装详细步骤

linux下mysql-5.5.15安装详细步骤 注:该文档中用到的目录路径以及一些实际的值都是作为例子来用,具体的目录路径以各自安装时的环境为准 mysql运行时需要一个启动目录.一个安装目录和一个 ...

Linux下rar unrar的安装

Linux下rar unrar的安装: 以3.8.0版本为例,如果是64位平台,执行以下命令,也可以去官方网站:)下载最新版: wget http://www.rarlab.com/rar/rarli ...

linux下python3源码安装及卸载

Linux下Python3的源码编译安装和卸载方法 [日期:2019-06-21] 来源:博客园  作者:wuli潇萧 [字体:大 中 小]     (一)Linux下软件的源码编译安装和卸载方法 L ...

在linux下,查看一个运行中的程序, 占用了多少内存

1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...

Linux下Memcache服务器端的安装

最近在研究怎么让Discuz!去应用Memcache去做一些事情,记录下Memcache安装的过程. Linux下Memcache服务器端的安装服务器端主要是安装memcache服务器端,目前的最新版 ...

ElasticSearch概述及Linux下的单机ElasticSearch安装

原文链接:http://blog.csdn.net/w12345_ww/article/details/52182264 这两天在项目中要涉及到ElasticSearch的使用,就上网去搜索了一些这方 ...

随机推荐

浅谈JDBC编程

一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

1415-2 计科&计高 软件工程博客&Github地址汇总-修正版

序号 标识 博客 代码 1 1121袁颖 joanyy joanyy 2 1122崔琪 chitty ChittyCui 3 1123吕志浩 lucy123 715lvzhihao 4 1124张静 ...

Qt Quick 简单教程 - 1 (代码备忘)

qmlscene 未安装 由于出现上面的情况,我开始转战Windows 下学习,昨天安装好了Qt Sdk了,哟吼吼吼. mail.qml内容: import QtQuick 2.3 import Qt ...

Transaction: atomicity, consistency, separability, persistence

Transaction: atomicity, consistency, separability, persistence http://langgufu.iteye.com/blog/143440 ...

Linux下找不到动态链接库

1.生成静态库 生成静态库使用ar工具,其实ar是archive的意思 $ar cqs libhello.a hello.o 2.生成动态库 用gcc来完成,由于可能存在多个版本,因此通常指定版本号: ...

队列Queue FIFO先进先出 栈Stack FILO先进后出

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign

上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使 ...

JavaScript的DOM编程--06--两个实验

linux下qt的文件打包,【最详细最完整】在Linux 下如何打包免安装的QT程序?相关推荐

  1. 【QT】QT生成.exe安装包详细全文(保姆级教程)--打包软件及问题大全

    缺少.dll文件的朋友,请跳转到我的另一篇文章"QT编译后的.exe文件运行时缺少一些.dll文件的解决办法[超详细教程,新手必备]",把问题解决再往下看. 一.前言: 最近,一个 ...

  2. linux 复制指定目录下的全部文件到另一个目录中,linux cp 文件夹

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. linux复制指定目录下的全部文件到另一个目录中 复制指定目录下的全部文件到另一个目录中 文件及目录 ...

  3. 将linux目录中的特定文件推送到手机_linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹...

    linux复制指定目录下的全部文件到另一个目录中 复制指定目录下的全部文件到另一个目录中 文件及目录的复制是经常要用到的.linux下进行复制的命令为cp. 假设复制源目录 为 dir1 ,目标目录为 ...

  4. linux cp目录到指定目录,linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹...

    解压war包    jar -xvf   xxxx.war linux复制指定目录下的全部文件到另一个目录中 复制指定目录下的全部文件到另一个目录中 文件及目录的复制是经常要用到的.linux下进行复 ...

  5. 在linux下给编辑文件在哪里设置密码,技术|怎样在 Linux 中用 Vim 对文件进行密码保护...

    Vim 是一种流行的.功能丰富的和高度可扩展的 Linux 文本编辑器,它的一个特殊功能便是支持用带密码各种的加密方法来加密文本文件. 本文中,我们将向你介绍一种简单的 Vim 使用技巧:在 Linu ...

  6. python遍历目录下的所有文件和目录详细介绍

    目录结构如下图: test---a------d------g--------g.txt test---a------d------a.txt test---a------e --------b -- ...

  7. 每天一个linux命令(目录文件操作):【转载】Linux文件类型与扩展名

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...

  8. linux文件传输到另一台linux,使用scp将文件/目录拷贝到另一台Linux主机上

    如何将一台Linux主机上的文件或目录拷贝到另一台Linux主机上,scp命令可以实现该需求 前提条件:两台Linux主机处于同一网段,可以互相ping通 操作如下: 文件拷贝 ①将本地文件拷贝到远端 ...

  9. Linux qt程序打包依赖库,Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)...

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

最新文章

  1. ​GEB:焦硕等发表生态位的系统发育保守性决定土壤古菌地理格局
  2. mysql分页案例_php+mysql 进行分页案例
  3. 计算机组成原理第二版复习大纲,计算机组成原理复习大纲
  4. IDEA设置自动导包功能
  5. 可以多次使用同一个hbitmap吗_求婚钻戒和结婚钻戒可以是同一个吗?意义戴法各不同,别胡乱混淆...
  6. vb.net word 自定义工具栏_Word双面快速简捷打印?
  7. 未来教育计算机三级课后题答案,全国计算机三级网络技术课后题答案(2016.3 未来教育).docx...
  8. 分享一个棋力很强的象棋应用和一个强大的开局库
  9. S3C2440开发板烧录笔记
  10. c语言傅立叶变换,傅立叶变换与傅立叶反变换的C语言实现
  11. python编程语言期中试题_MOOC Python编程的第六周测试,MOOCPython,语言,程序设计,测试题...
  12. 点积与向量积(点乘与叉乘)
  13. Android 编程神器,Android轻应用开发神器!
  14. 通信技术计算机技术合称为,通信技术、计算机技术和控制 技术合称为3C
  15. 《Adobe Premiere Pro CS6中文版经典教程》——复习题
  16. 现货黄金和纸黄金的区别?
  17. HBuilderX、微信开发者工具、VScode之间运行微信公众号
  18. 【算法】高精度(加减乘除)包含高精度*高精度高精度/高精度
  19. 3.4 网页开发工具
  20. 什么是cookie?cookie的优缺点。

热门文章

  1. 这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你在哪个阶段?
  2. Word文档(.docx) 转为 Markdown文档(.md)的一种方法 —— 一款word插件(Writage)
  3. matlab2013单步运行,matlab如何单步调试
  4. 解决Hive动态分区小文件过多问题
  5. 会覆盖本地_新服务进阶,阿里本地生活开启“三环阵营”
  6. VMWare Workstation Pro 15安装黑苹果
  7. OpenCV系列之霍夫圈变换 | 三十三
  8. 学习Linux命令(18)
  9. NS3网络仿真器搭建
  10. Python 于 webgame 的应用(下)