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程序的手工发布相关推荐

  1. Linux环境打包Qt程序并部署到Docker容器

    Linux环境打包Qt程序并部署到Docker容器 根据项目需要,将UKylin版本的qt应用程序打包并且部署到docker容器中 系统版本 UKylin版本:Ubuntu18.04 Docker镜像 ...

  2. linux环境中QT程序连接达梦数据库DM7简介

    linux环境中QT程序连接达梦数据库DM7简介 一.安装UnixODBC 1.下载UnixODBC安装包 下载地址:ftp://ftp.unixodbc.org/pub/unixODBC/unixO ...

  3. linux qt 达梦,linux环境中QT程序连接达梦数据库DM7简介

    linux环境中QT程序连接达梦数据库DM7简介 一.安装UnixODBC 1.下载UnixODBC安装包 下载地址:ftp://ftp.unixodbc.org/pub/unixODBC/unixO ...

  4. Linux下打包qt程序,可以发布到一台纯净的linux发行版系统上

    1.把你要发布的程序单独放到一个文件夹下 2.在文件夹下创建一个sh脚本名为pack.sh 输入以下内容 #!/bin/sh exe="app" #你需要发布的程序名称 des=& ...

  5. 【破事氵】在Linux环境中让程序在后台运行

    前言 首先,相信大家都或多或少了解过linux和云服务器.linux作为一个开源的操作系统内核,在开发者人群和服务器领域中有着很高的使用率.而现在在以阿里云为代表的云服务器商中,可以以很低的价格买入入 ...

  6. linux环境下QT程序内存泄露检测-Qt creator +Valgrind检测内存泄漏(linux)

    原文查看具体内容: Qt creator +Valgrind检测内存泄漏(linux)_枫影竹韵的博客-CSDN博客 一.说明 由于Qt creator和valgrind是相互独立的,所以需要安装va ...

  7. Linux环境中对海康威视工业相机SDK进行二次开发(QT+CMake+Opencv+海康SDK)

    关于在Windows环境中对海康威视工业相机SDK进行二次开发的话,可以参考这两篇博客. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一) 海康威视工业相机SDK二 ...

  8. 基于Linux环境中C语言程序----Hello World

    文章目录 基于Linux环境中C语言程序----Hello World 前言 C语言的特点 在Linux环境中打印Hello World 基于Linux环境中C语言程序----Hello World ...

  9. Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍

    本文讲的是Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍, 前言 建议阅读本文之前,你对ARM组件的有个基本了解,本文会先为你介绍32位Linux环境中进程的内存布局,然后再介绍堆栈和堆 ...

最新文章

  1. 17张图揭密支付宝系统架构
  2. CentOS 6.5安装python3.3.4
  3. 开发文件上传功能稍不注意就会引发安全漏洞
  4. 安装 | Matlab2022a下载及新功能一览
  5. php 解压dat,电脑微信dat文件怎么打开
  6. 网站如何进行渠道跟踪_网站前期要如何进行SEO优化?
  7. PythonTips1
  8. 手机闪存速度排行_2020年手机性能排行榜前十
  9. 黑马JavaEE云计算大数据全套视频 JavaEE云计算开发全套视频教程 超全精华班 82G
  10. python 拼音输入法_隐马尔科夫模型python实现简单拼音输入法
  11. 合取范式可满足性问题:CDCL(Conflict-Driven Clause Learning)算法详解
  12. c语言vc绘图,VC++绘图编程教程
  13. Visual C# 操作 Excel 文件(二) 封裝成 MyExcel 類
  14. win10同时安装wps和office时,如何设置默认应用为office!!!
  15. 美国使用计算机语言排行,权威首发!2017年USNews美国大学研究生计算机编程语言专业排名...
  16. 公安计算机专业就业前景,公安视听技术专业就业方向及就业前景分析
  17. Field baseMapper in com.xxx required a single bean,but 100 were found --------Mybatis-Plus
  18. EBS中AP发票分配行的解释
  19. 销售清单怎么打印有什么软件
  20. 信捷plc485通信上位机_【新阁教育】穷学上位机系列——搭建STEP7仿真环境

热门文章

  1. vscode 支持 markdown 流程图
  2. html检查输入为空,html input输入验证不为空
  3. pd怎么卸载linux系统,parallels desktop11怎么卸载?parallels desktop11卸载方法
  4. nuxt.js 配置后端的请求地址
  5. (四)Neo4j删除数据需要注意的问题
  6. 1040. 有几个PAT(25
  7. 【算法设计与分析】08 序列求和的方法
  8. Rest Framework
  9. Leetcode 950. Reveal Cards In Increasing Order
  10. Python_面向对象_zipfile和tarfile