Linux Debian 如何部署 Qt?

在这里以 HelloWorld 为例

目录结构如下:

.
├── HelloWorld
├── HelloWorld.sh
├── imageformats
│   ├── libqgif.so
│   ├── libqicns.so
│   ├── libqico.so
│   ├── libqjpeg.so
│   ├── libqsvg.so
│   ├── libqtga.so
│   ├── libqtiff.so
│   ├── libqwbmp.so
│   └── libqwebp.so
├── libicudata.so.56 -> libicudata.so.56.1
├── libicudata.so.56.1
├── libicui18n.so.56 -> libicui18n.so.56.1
├── libicui18n.so.56.1
├── libicuuc.so.56 -> libicuuc.so.56.1
├── libicuuc.so.56.1
├── libQt5Core.so.5 -> libQt5Core.so.5.9.5
├── libQt5Core.so.5.9.5
├── libQt5DBus.so.5 -> libQt5DBus.so.5.9.5
├── libQt5DBus.so.5.9.5
├── libQt5Gui.so.5 -> libQt5Gui.so.5.9.5
├── libQt5Gui.so.5.9.5
├── libQt5Widgets.so.5 -> libQt5Widgets.so.5.9.5
├── libQt5Widgets.so.5.9.5
├── libQt5XcbQpa.so.5 -> libQt5XcbQpa.so.5.9.5
├── libQt5XcbQpa.so.5.9.5
├── platforminputcontexts
│   ├── libcomposeplatforminputcontextplugin.so
│   ├── libfcitxplatforminputcontextplugin.so
│   ├── libibusplatforminputcontextplugin.so
│   └── libqtvirtualkeyboardplugin.so
├── platforms
│   ├── libqeglfs.so
│   ├── libqlinuxfb.so
│   ├── libqminimalegl.so
│   ├── libqminimal.so
│   ├── libqoffscreen.so
│   ├── libqvnc.so
│   └── libqxcb.so
├── platformthemes
│   └── libqgtk3.so
└── xcbglintegrations
├── libqxcb-egl-integration.so
└── libqxcb-glx-integration.so

其中 HelloWorld.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 "$@"

HelloWorld.sh 脚本中设置了 LD_LIBRARY_PATH 环境变量,即 ldd 脚本命令搜索的动态依赖库的路径。

然后运行以以脚本名称的一个应用(故脚本名称需要和应用名称一致),当然你也可以在 /etc/profile 环境变量文件中自由的添加该环境变量,类似这样的LD_LIBRARY_PATH=/home/app/HelloWorld

也可以直接在命令行终端添加这样的语句

# 添加临时的环境变量,仅在该命令行终端有效。
export LD_LIBRARY_PATH=/home/app/HelloWorld

详细部署请自行查看

http://doc.qt.io/qt-5/linux-deployment.html


值得一提的是动态库依赖需要软链接

这里以 libQt5Core.so.5.9.5 为例

# 其中 libQt5Core.so.5 就是软链接指向 libQt5Core.so.5.9.5
├── libQt5Core.so.5 -> libQt5Core.so.5.9.5
├── libQt5Core.so.5.9.5

如果你不复制软链接到程序目录中,仅复制 libQt5Core.so.5.9.5 ,使用 ldd 命令可以查看看无法需要到该动态库。

# 查看应用程序依赖
ldd HelloWorld
# 查看动态库依赖
ldd libQt5Core.so.5.9.5

如果想另外设置插件目录可以设置 QT_QPA_PLATFORM_PLUGIN_PATH 环境变量。

# 设置一个目录
export QT_QPA_PLATFORM_PLUGIN_PATH=/home/app/HelloWorld/plugins # 设置多个目录 : 相隔即可
export QT_QPA_PLATFORM_PLUGIN_PATH=/home/app/HelloWorld/plugins:/home/app/HelloWorld:/home/app

或者使用 qt.conf 文件指定,放置到应用程序目录下即可。

[Paths]
Plugins=/path/to/plugins

查看具体加载插件信息

export QT_DEBUG_PLUGINS=1

复制动态库脚本

该脚本会复制程序依赖到运行该脚本的目录中

lddExport.sh

#!/bin/sh
# 应用程序名称
exe="HelloWorld" # 取脚本名称
#exe=`basename $0 | sed s,\.sh$,,`
#ehco $exe # 应用程序目录
des="/home/app/HelloWorld" deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des

设置 export LD_LIBRARY_PATH 环境变量会导致 segmentation fault 段错误

清除冲突动态库即可,即每个系统版本的平台依赖的库。

比如 libX11.so.6 libxcb.so.1``libXau.so.6``libXdmcp.so.6``libbsd.so.0``librt.so.1

Linux Debian 如何部署 Qt?的更多相关文章

  1. Linux Debian 7部署LEMP(Linux+Nginx+MySQL+PHP)网站环境

    我们在玩VPS搭建网站环境的时候,都经常看到所谓的LAMP.LNMP.LEMP,LAMP, 其中的A代表APECHE WEB驱动环境,LNMP中的N代表NGINX驱动环境,只不过海外的叫法NGINX ...

  2. 使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和gdb调试(一台电脑有桌面系统,一台电脑无桌面系统)

      版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/libaineu2004/article/details/62423830 尊重作者,支持原创,如 ...

  3. 部署Qt程序时plugins相关问题

    部署qt程序时,经常涉及到Qt5.5.0\5.5\msvc2013\plugins目录下的一些动态链接库 例如数据库sqldrivers,操作系统类型platforms,读取各种图片imageform ...

  4. SPARK在linux中的部署,以及SPARK中聚类算法的使用

    眼下,SPARK在大数据处理领域十分流行.尤其是对于大规模数据集上的机器学习算法.SPARK更具有优势.一下初步介绍SPARK在linux中的部署与使用,以及当中聚类算法的实现. 在官网http:// ...

  5. Node.js~在linux上的部署~pm2管理工具的使用

    之前写了两篇关于在linux上部署nodejs的文章,大家如果没有基础可以先看前两篇<Node.js~在linux上的部署>,<Node.js~在linux上的部署~外网不能访问no ...

  6. Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包

    Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...

  7. Linux项目自动部署

    场景:linux中自动部署项目在工作中经常遇到,快速高效的部署项目能够大幅提高工作效率.现在将项目部署的过程记录下来,以供参考,其中用到的知识点现在还有很多不很清楚,后面要好好琢磨琢磨! 1 项目部署 ...

  8. linux服务器批量部署应用系统shell脚本(Tomcat/jetty)

    linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-t ...

  9. Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)

    本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...

随机推荐

  1. ViewStub 的使用

    一.内容概述 举例说明ViewStub标签的使用 二.ViewStub类的文档说明及应用场举例 文档描述: A ViewStub is an invisible, zero-sized View th ...

  2. es迁移索引数据合并

    es集群迁移,大规模迁移过程中,比如我们以当天时间做索引,在新的es集群会存在和老的es集群一样的索引文件名,这个时候用snapshot恢复数据会出现冲突问题.这里我们可以用reindex api来解 ...

  3. JAVASCRIPT中{} + {}的结果是什么?

    转自:http://www.heyria.com/index.php/2014/01/js-object-plus-object/ 当对象或者数组相加的时候,会产生有点意外的结果. 这篇文章主要是解释 ...

  4. 2B01-View-Switcher

    Gallery和swithcer联合使用 /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the ...

  5. swoole-1.7.18 版本已发布,支持 PHP7

    swoole-1.7.18 版本已发布,支持 PHP7 matyhtf 发布于: 2015年07月23日 (22评) 分享到:    收藏 +16 3月19日,深圳源创会火热报名中,go>> ...

  6. 返回当前文档的文档的url

    HTML DOM referrer 属性 HTML DOM Document 对象 定义和用法 referrer 属性可返回载入当前文档的文档的 URL. 语法 document.referrer 说 ...

  7. iOS开发之Auto Layout入门(转)

    随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享. 什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新 ...

  8. eclipse 建立maven项目 显示红叉的解决方法

    1.建立好之后就会发现项目有红叉. 这时发现查查在main处,打开项目>属性>Java Build Path>source,发现里边有红叉(如下图),这是由于我们的src/main下 ...

  9. 【转载】java连接MYSQL

    原文出自 http://qq163230530.blog.163.com/blog/static/4289250620081186262719/ 这篇文章主要以MySQL为例讲下Java如何连接到数据 ...

  10. Spring4 MVC+Hibernate4+MySQL+Maven使用注解集成实例

    在本教程中,我们将使用基于注解的配置集成Spring和Hibernate. 我们将开发包含表单要求用户输入一个简单的CRUD为导向Web应用程序,使用Hibernate保存输入的数据到 MySQL 数 ...