Linux环境中Qt程序的手工发布
Qt 5.7.0 编写的程序需要部署到一台没有安装Qt的目标机器上,程序采用C++与QML混合编程,QML做界面,C++写逻辑。
环境说明
开发环境 Ubuntu 16.04.1 LTS
运行环境 CentOS 7.2.1511
下面描述这个手工操作的发布过程。
1、在开发环境中采用Release方式编译程序,生成执行程序qtest
2、在目标环境中,从开发环境拷贝执行程序,并尝试执行./qtest
报错:error while loading shared libraries: libQt5Quick.so.5: cannot open shared object file: No such file or directory
解决:从开发环境中拷贝需要的动态库文件,放在与执行程序相同的路径下,并设置环境变量LD_LIBRARY_PATH
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
再次执行./qtest
3、运行时还会提示其他的动态库文件缺失,根据提示再次拷贝相应的文件
可以在开发环境中使用ldd命令查看执行程序依赖的Qt动态库文件,ldd qtest | grep libQt,打包拷贝。
4、再次执行,报错
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".
解决:在执行程序所在的当前路径下创建子目录,并从开发环境中Qt安装目录下的plugins子目录中拷贝动态库文件
mkdir platforms
scp 开发环境:/path_to_Qt/plugins/platforms/libqxcb.so platforms/
重要!!! 根据ldd libqxcb.so的输出拷贝需要的几个库文件,如libQt5DBus.so.5 libQt5XcbQpa.so.5,放在与执行程序相同的路径下
5、再次执行,报错
qrc:/main.qml:1:1: module "QtQuick" is not installed
qrc:/main.qml:4:1: module "QtQuick.Controls" is not installed
qrc:/main.qml:3:1: module "QtQuick.Window" is not installed
qrc:/main.qml:2:1: module "QtQuick.Layouts" is not installed
...
解决:从开发环境中拷贝Qt安装目录下的qml子目录,并设置环境变量
scp -rp 开发环境:/path_to_Qt/qml ./
export QML2_IMPORT_PATH=./qml
6、再次执行,报错
qrc:/main.qml:4:1: plugin cannot be loaded for module "QtQuick.Controls": Cannot load library qml/QtQuick/Controls.2/libqtquickcontrols2plugin.so: (libQt5QuickTemplates2.so.5: cannot open shared object file: No such file or directory)
qrc:/main.qml:4:1: plugin cannot be loaded for module "QtQuick.Controls": Cannot load library qml/QtQuick/Controls.2/libqtquickcontrols2plugin.so: (libQt5QuickControls2.so.5: cannot open shared object file: No such file or directory)
qrc:/main.qml:3:1: plugin cannot be loaded for module "QtQuick.Controls": Cannot load library qml/QtQuick/Controls/libqtquickcontrolsplugin.so: (libQt5Widgets.so.5: cannot open shared object file: No such file or directory)
解决:根据提示,从开发环境拷贝缺失的动态库文件
7、再次执行,报错
qrc:/main.qml:14:5: QML Image: Error decoding: qrc:/png/1/back.jpg: Unsupported image format
解决:从开发环境中拷贝图像格式解析插件
mkdir imageformats
scp 开发环境:/path_to_Qt/plugins/imageformats/libqjpeg.so imageformats/
8、再次执行,报错
QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled
QXcbIntegration: Cannot create platform offscreen surface, neither GLX nor EGL are enabled
failed to acquire GL context to resolve capabilities, using defaults..
QXcbConnection: XCB error: 147 (Unknown), sequence: 171, resource id: 0, major code: 140 (Unknown), minor code: 20
QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled
Failed to create OpenGL context for format QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0)
解决:从开发环境中拷贝所需的glx/egl插件
mkdir xcbglintegrations
scp 开发环境:/path_to_Qt/plugins/xcbglintegrations/libqxcb-egl-integration.so xcbglintegrations
scp 开发环境:/path_to_Qt/plugins/xcbglintegrations/libqxcb-glx-integration.so xcbglintegrations
9、搞定
总结:
目标环境需要四类文件:
1、一组动态库文件,放在执行程序所在目录下
2、一组插件,放在执行程序所在目录下的子目录中
3、一个qml子目录
4、两个环境变量LD_LIBRARY_PATH QML2_IMPORT_PATH
————————————————
版权声明:本文为CSDN博主「justkk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/justkk/article/details/52921899
Linux环境中Qt程序的手工发布相关推荐
- Linux环境打包Qt程序并部署到Docker容器
Linux环境打包Qt程序并部署到Docker容器 根据项目需要,将UKylin版本的qt应用程序打包并且部署到docker容器中 系统版本 UKylin版本:Ubuntu18.04 Docker镜像 ...
- linux环境中QT程序连接达梦数据库DM7简介
linux环境中QT程序连接达梦数据库DM7简介 一.安装UnixODBC 1.下载UnixODBC安装包 下载地址:ftp://ftp.unixodbc.org/pub/unixODBC/unixO ...
- linux qt 达梦,linux环境中QT程序连接达梦数据库DM7简介
linux环境中QT程序连接达梦数据库DM7简介 一.安装UnixODBC 1.下载UnixODBC安装包 下载地址:ftp://ftp.unixodbc.org/pub/unixODBC/unixO ...
- Linux下打包qt程序,可以发布到一台纯净的linux发行版系统上
1.把你要发布的程序单独放到一个文件夹下 2.在文件夹下创建一个sh脚本名为pack.sh 输入以下内容 #!/bin/sh exe="app" #你需要发布的程序名称 des=& ...
- 【破事氵】在Linux环境中让程序在后台运行
前言 首先,相信大家都或多或少了解过linux和云服务器.linux作为一个开源的操作系统内核,在开发者人群和服务器领域中有着很高的使用率.而现在在以阿里云为代表的云服务器商中,可以以很低的价格买入入 ...
- linux环境下QT程序内存泄露检测-Qt creator +Valgrind检测内存泄漏(linux)
原文查看具体内容: Qt creator +Valgrind检测内存泄漏(linux)_枫影竹韵的博客-CSDN博客 一.说明 由于Qt creator和valgrind是相互独立的,所以需要安装va ...
- Linux环境中对海康威视工业相机SDK进行二次开发(QT+CMake+Opencv+海康SDK)
关于在Windows环境中对海康威视工业相机SDK进行二次开发的话,可以参考这两篇博客. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一) 海康威视工业相机SDK二 ...
- 基于Linux环境中C语言程序----Hello World
文章目录 基于Linux环境中C语言程序----Hello World 前言 C语言的特点 在Linux环境中打印Hello World 基于Linux环境中C语言程序----Hello World ...
- Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍
本文讲的是Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍, 前言 建议阅读本文之前,你对ARM组件的有个基本了解,本文会先为你介绍32位Linux环境中进程的内存布局,然后再介绍堆栈和堆 ...
最新文章
- 17张图揭密支付宝系统架构
- CentOS 6.5安装python3.3.4
- 开发文件上传功能稍不注意就会引发安全漏洞
- 安装 | Matlab2022a下载及新功能一览
- php 解压dat,电脑微信dat文件怎么打开
- 网站如何进行渠道跟踪_网站前期要如何进行SEO优化?
- PythonTips1
- 手机闪存速度排行_2020年手机性能排行榜前十
- 黑马JavaEE云计算大数据全套视频 JavaEE云计算开发全套视频教程 超全精华班 82G
- python 拼音输入法_隐马尔科夫模型python实现简单拼音输入法
- 合取范式可满足性问题:CDCL(Conflict-Driven Clause Learning)算法详解
- c语言vc绘图,VC++绘图编程教程
- Visual C# 操作 Excel 文件(二) 封裝成 MyExcel 類
- win10同时安装wps和office时,如何设置默认应用为office!!!
- 美国使用计算机语言排行,权威首发!2017年USNews美国大学研究生计算机编程语言专业排名...
- 公安计算机专业就业前景,公安视听技术专业就业方向及就业前景分析
- Field baseMapper in com.xxx required a single bean,but 100 were found --------Mybatis-Plus
- EBS中AP发票分配行的解释
- 销售清单怎么打印有什么软件
- 信捷plc485通信上位机_【新阁教育】穷学上位机系列——搭建STEP7仿真环境
热门文章
- vscode 支持 markdown 流程图
- html检查输入为空,html input输入验证不为空
- pd怎么卸载linux系统,parallels desktop11怎么卸载?parallels desktop11卸载方法
- nuxt.js 配置后端的请求地址
- (四)Neo4j删除数据需要注意的问题
- 1040. 有几个PAT(25
- 【算法设计与分析】08 序列求和的方法
- Rest Framework
- Leetcode 950. Reveal Cards In Increasing Order
- Python_面向对象_zipfile和tarfile