• deepin(深度)系统下qt5.12.0的程序打包发布到linux云服务器上


            做项目时要求,要求做一个用于QT客户端更新提供更新的服务器,服务器弄好啦,要测试一下,在发布时,发现了一些问题,在此记录一下。

    这个打包和我的前一篇博客步骤一样,打包可参考https://blog.csdn.net/qq_44667165/article/details/127609929

    打包好后,我把服务程序上传到我的阿里云服务器上,我的云服务器是ubantu20.04的命令行界面,内存只有2G,没有图形界面,比较轻便,没有图形界面,系统资源的消耗小,所以一般服务器不搞图形界面,方便远程命令操控

    然后我在云服务器上运行时,提示

     Could not load the Qt platform plugin "xcb" in "" even though it was found

    这是什么意思呢?

    我查了一下,xcb在Qt里是图形界面必须要加载的模块,这里卡了我,一时没有头绪,因为我的服务器是没有加载图形界面的,怎么会这样呢?

    后面想了想,既然需要图形模块来加载的话,应该但是我的服务器没有图形界面,加载不了可执行程序里面要依赖的图形库,也就是GUI界面。

    我去打包的lib目录看了一下

    看到33个库文件,有几个我熟悉的GUI库文件,XCB,Widget,其他的不怎么认识,肯定还有,因为加载图形界面是比较耗资源的,需要很多库的协同加载

    为什么有那么多图形库呢,想到这里,我就去我的源代码那里看了下,去Qt的.pro文件看了看,虽然我有QT -= gui的配置,但是认真看了下,还有这个 QT += widgets,这个就是图形模块了,注释了之后,程序也报错了

     QApppliCation是需要GUI支持的,关系如下

            QApplication继承了QGuiApplication类,而QGuiApplication继承了QCoreApplication类,而QCoreApplication又继承QObject的

            QCoreApplication定义在core模块中,为应用程序提供了一个非gui的事件循环,QGuiApplication定义在gui模块中,提供了额外的gui相关的设置,比如桌面设置,风格,字体,调色板,剪切板,光标;QApplication定义在widgets模块中,是QWidget相关的,能设置双击间隔,按键间隔,拖拽距离和时间,滚轮滚动行数等,能获取桌面,激活的窗口,模式控件,弹跳控件等

    到此原因就很明朗了,把有关GUI的模块全部去掉即可,使用纯命令行模式的QCoreApplication即可,

     

     这样子,然后重新编译,把之前打包好的文件全部删掉,重新打包一遍

    然后再次进入到打包好的lib目录下:

    此时只有14个库文件了,之前有GUI的有33个库文件,少了一倍多,当然程序打包时,大小也少了查不多一倍。所以服务器为什么不搞GUI的原因之一,耗资源

    重新上传服务器,配置好,就没有问题了,运行,没有报错了,搞定!!!

            服务器一般只搞命令行界面的,里面除了程序外,日志模块必不可少,各种类型的日志文件是排查程序问题的重要途径。服务器一般部署在一个独立的主机上,可以随时ssh等方式远程控制。

  • 相关阅读:
    SpringCloud - Config分布式配置中心
    java udp 接收日志
    RocketMQ 5.0 可观测能力升级:Metrics 指标分析
    SpringBoot项目--如何不停服更新应用?
    【问题证明】矩阵方程化为特征值方程求得的特征值为什么是全部特征值?不会丢解吗?
    7×24无人值守直播推流软件开发实战,一文为你揭开视频推流的底层原理(附源码)
    SpringCloud(15)之SpringCloud Gateway
    【Javaweb 1】带你搞懂request,respond,servlet
    JVM内存和垃圾回收-05.虚拟机栈
    【设计模式】二、UML 类图概述
  • 原文地址:https://blog.csdn.net/qq_44667165/article/details/127730101