Linux Debian 如何部署 Qt?
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?的更多相关文章
- Linux Debian 7部署LEMP(Linux+Nginx+MySQL+PHP)网站环境
我们在玩VPS搭建网站环境的时候,都经常看到所谓的LAMP.LNMP.LEMP,LAMP, 其中的A代表APECHE WEB驱动环境,LNMP中的N代表NGINX驱动环境,只不过海外的叫法NGINX ...
- 使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和gdb调试(一台电脑有桌面系统,一台电脑无桌面系统)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/libaineu2004/article/details/62423830 尊重作者,支持原创,如 ...
- 部署Qt程序时plugins相关问题
部署qt程序时,经常涉及到Qt5.5.0\5.5\msvc2013\plugins目录下的一些动态链接库 例如数据库sqldrivers,操作系统类型platforms,读取各种图片imageform ...
- SPARK在linux中的部署,以及SPARK中聚类算法的使用
眼下,SPARK在大数据处理领域十分流行.尤其是对于大规模数据集上的机器学习算法.SPARK更具有优势.一下初步介绍SPARK在linux中的部署与使用,以及当中聚类算法的实现. 在官网http:// ...
- Node.js~在linux上的部署~pm2管理工具的使用
之前写了两篇关于在linux上部署nodejs的文章,大家如果没有基础可以先看前两篇<Node.js~在linux上的部署>,<Node.js~在linux上的部署~外网不能访问no ...
- Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包
Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...
- Linux项目自动部署
场景:linux中自动部署项目在工作中经常遇到,快速高效的部署项目能够大幅提高工作效率.现在将项目部署的过程记录下来,以供参考,其中用到的知识点现在还有很多不很清楚,后面要好好琢磨琢磨! 1 项目部署 ...
- linux服务器批量部署应用系统shell脚本(Tomcat/jetty)
linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-t ...
- Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)
本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...
随机推荐
- XAOP的使用示范例子
代码地址如下:http://www.demodashi.com/demo/12976.html XAOP 一个简易的AOP(Android)应用框架.囊括了最实用的AOP应用. 特点 支持快速点击切片 ...
- iOS开发-项目的完整重命名方法,图文教程。
前言:在IOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.直接改项目名吧,XCODE又不会帮你改所有的名字.总是有很多文件.文件夹或者是项目设置的项.而且都是不能随便改的,有时候改着改着,编译 ...
- ActiveMQ介绍和ActiveMQ入门实例
ActiveMQ百度百科 ActiveMQ入门实例-cnblogs.com 作者用的是5.5的版本,我测试时用的是5.6,按照作者说的整了一下,走得通
- C语言学习笔记(四) 流程控制
流程控制 流程控制,说通俗一点就是程序代码执行的顺序.不管对于哪门语言来说,流程控制都是很重要的一部分内容: 流程控制的分类,可以分为三大类: 1.顺序 这个很好理解,顺序执行就是代码从上往下一行行的 ...
- Bootstrap组件之导航
.nav--指定列表元素为导航组件. .nav-tabs--指定导航组件的样式为标签页: .nav-pills--指定导航组件的样式为胶囊式标签页: .nav-stacked--指定标签页的样式为垂直 ...
- table行编辑
一个简单的Demo <html> <head> <title>Table Test Demo</title> <style> .view_t ...
- eslint 人性化配置
错误列表: http://www.zystudios.cn/blog/post/70.Shtml 人性化一点.别老虐我啊晓梦大师 module.exports = { root: true, pars ...
- 光栅化规则(Rasterization Rules)
光栅化规则不是唯一的,只要能满足在扫描线填充过程中,对于一条分割线两边的像素能够被不重复不遗漏地填充即可. 在gdi3d中目前使用的是下面光栅化规则: xLeft_int=ceil(xLeft-0.5 ...
- Atitit。Cas机制 软件开发 编程语言 无锁机制 java c# php
Atitit.Cas机制 软件开发 编程语言 无锁机制 java c# php 1. 为什么需要无锁操作1 2. 硬件支持 cas atomic2 3. 无锁编程(Lock-Free)就是在某些应用 ...
- ZooKeeper_基础知识学习
ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...