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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2017编译UE4.19.2报错

error C4577: 在未指定异常处理模式的情况下使用了 "noexcept";不一定会在异常时终止。指定 /EHsc 修改 VCToolChain.cs, 在 AppendCLArguments_Global 函数中增加 Arguments.Add("/EHsc");

OpenGL-坐标系

笛卡尔坐标系 二维绘图:笛卡尔坐标有一个X轴和一个Y轴组成,X轴为水平方向,Y轴为垂直方向,X和Y相互垂直二维笛卡尔坐标系 三维绘图:笛卡尔坐标多了一个Z轴,Z轴同时垂直于X和Y轴。Z轴的实际意义代表着三维物…

Heap Sort

Heap(An array visualized as a complete binary tree): Heap Operations: Insert,                         O(log(n))  Add it to the end of the tree and bubble it up. Find Max(return the element with maximum key),   O(1)Extract Max(fi…

UML类图与类间六种关系表示

1.类与类图 类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性,操作,关系的对象集合的总称. 类图是使用频率最高的UML图之一. 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助开发人员理解系统,它是系统分析和设计阶段的重要产物,也是系统编码和测试…

C# 延迟初始化

一个对象的延迟初始化意味着该对象的创建将会延迟至第一次使用该对象时。(在本主题中,术语“延迟初始化”和“延迟实例化”是同义词。)延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存要求。 以下是最常见的方…

FindWindowEx 遍历所有窗口

FindWindowEx 唯一麻烦是第2个参数的指定 . Explore 下窗口是Z序的 , 实际上就是根据 第一个参数 和 第2个参数 来找 第2个参数后的一个窗口: HWND child 0; child FindWindowEx ( NULL , child ,NULL,NULL); 这样 , child 就是一个Explore , 然后 , 通过循环能够找到…

jQuery介绍 DOM对象和jQuery对象的转换与区别

jQuery Hello World程序 <script type“text/javascript” src“xxx//jquery-x.y.z.js">引入jQuery.存在两个版本,jquery-x.y.z.min.js是精简压缩版,不带min的是开发版,代码中的注释和缩进等都被保留了.注意路径中的”/"需要转义,即用”//“.$()符号将DOM对象转…

PlacementBrowser源码分析

PlacementBrowser的源码在 Editor/PlacementMode下面 一、Placement分类的创建 1. Placement分类被存贮在 FPlacementModeModule 的成员变量 Categories里面。 2. 在 FPlacementModeModule::StartupModule() 创建出所有的Placement分类 3. 每个大类由RegisterPlacementCat…

swfit-学习笔记(数组的使用)

Swift数组的使用&#xff0c;参考&#xff1a;《The Swift Programming Language》中文版 // Copyright (c) 2015年 Zsmile. All rights reserved. //import UIKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()//数组//创建空数…

menu源码分析

1. 菜单根据功能不同被划分了不同的section&#xff0c;不同的section的源码被分布在不同的地方 例如&#xff0c;主菜单的源码在Editor/Mainframe&#xff0c;datavaildation菜单的源码在Plugins\Editor\DataValidation下 2. 以主菜单为例&#xff0c;菜单以如下方法构建 首先…

Oracle Job相关

Oracle JOB的建立&#xff0c;定时执行任务 begin sys.dbms_job.submit(job > :job, what > proc_test;, next_date > trunc(sysdate)11/24, interva…

to_string

to_string 会把浮点数四舍五入

ueditor使用-图片上传正常,图片显示异常404

做个小项目&#xff0c;用到了ueditor&#xff0c;其中需要在ueditor中上传图片。 问题症状&#xff1a; 点击上传图片的按钮后选择图片&#xff0c;上传到了目的文件夹&#xff0c;但是显示不了&#xff0c;f12查看也是404.后来发觉显示图片时路径不对。 解决方案&#xff1a;…

Struts2从一个action转到另一个action的两种方法

在Struts2中&#xff0c;Action处理完用户请求后&#xff0c;将会返回一个字符串对象&#xff0c;这个字符串对象就是一个逻辑视图名。Struts 2通过配置逻辑视图名和物理视图之间的映射关系&#xff0c;一旦系统收到Action返回的某个逻辑视图名&#xff0c;系统就会把相应的物理…

根据select不同的选项实现相应input框添加项的显示

实现效果&#xff1a; 1.单击包时&#xff0c;显示包时的添加项 2.单击包里程&#xff0c;显示包里程的添加项 二 代码实现&#xff1a; 给select添加change事件 获取当前select的value 根据value判断对象显示其添加项框 <script> $(document).ready(function() {$(#typ…

内联汇编用法

在 Linux 代码中&#xff0c;经常可以看到在 C 代码中&#xff0c;嵌入部分汇编代码&#xff0c;这些代码要么是与硬件体系相关的&#xff0c;要么是对性能有关键影响的。 在很久以前&#xff0c;我特别惧怕内嵌汇编代码&#xff0c;直到后来把汇编部分的短板补上之后&#xf…

素数倒数的级数发散性的一个证明

问题 设$\mathbb P$为全体素数的集合,证明级数$$\sum_{p\in\mathbb P}\frac{1}{p}$$ 发散. 证明 做这个问题前&#xff0c;必须知道一个常识:全体素数集$\mathbb P$是无限的.所以题中才能作为级数. 如果结论不成立,则存在$k\in\mathbb N$使得$$\sum_{nk1}^{\infty}\frac{…

BZOJ2286 : [Sdoi2011]消耗战

对于每次询问&#xff0c;构造出虚树&#xff0c;相邻两点边权为该两点路径上边权的最小值 f[i]表示以i为根的子树与1不连通的最小代价,vip[i]表示i是不是关键点 f[i]sum(vip[j]?w[j]:min(f[j],w[j])) #include<cstdio> #include<algorithm> #define N 250010 #de…

epoll怎么实现的

epoll 可以说是编写高性能服务端程序必不可少的技术&#xff0c;在介绍 epoll 之前&#xff0c;我们先来了解一下 多路复用I/O 吧。 多路复用I/O 多路复用I/O&#xff1a;是指内核负责监听多个 I/O 流&#xff0c;当任何一个 I/O 流处于就绪状态&#xff08;可读或可写&#…

xxx

ota的升级及下载转载于:https://www.cnblogs.com/bigben0123/p/4221520.html