关于qt缺少xcb问题终极解决办法

关于qt缺少xcb问题终极解决办法

  • 问题背景
    • 系统环境
    • qt版本
    • 问题描述
  • 解决过程
    • 走的弯路
    • 解决问题的关键
  • 总结

问题背景

系统环境

中标麒麟,龙芯平台

qt版本

qt5.6

问题描述

原来的Qt程序是qt5.3.2版本,但是由于各种原因,升级成了qt5.6版本。
编译完成后放在其他机器上报错缺少xcb,报错如下:

This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, xcb, xcb.

Reinstalling the application may fix this problem.

解决过程

走的弯路

几乎尝试百度到的各种方式,无非就这么几种。
1、运行目录下添加platform文件夹,文件夹里放上libqxcb.so。
2、指定环境变量,具体什么变量记不清楚了。
3、在运行目录下,添加
libQt5Core.so
libQt5Gui.so
libQt5Network.so
libQt5Widgets.so
libQt5DBus.so
libicuuc.so
libicudata.so
libicui18n.so

最终结果还是不行。

解决问题的关键

设置环境变量 export QT_DEBUG_PLUGINS=1
加了这个环境变量,让我看到了QT程序加载的过程,看到了详细的报错信息。
最后一部分是这样的:


Found metadata in lib /usr/lib64/qt5/plugins/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 329218
}


Found metadata in lib /opt/dky/SASClient/bin/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 329216
}


QLibraryPrivate::loadPlugin failed on "/usr/lib64/qt5/plugins/platforms/libqxcb.so" : "Cannot load library /usr/lib64/qt5/plugins/platforms/libqxcb.so: (/lib64/libQt5XcbQpa.so.5: symbol _ZNK11QFontEngine6handleEv, version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)"
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, xcb, xcb.

Reinstalling the application may fix this problem.

看到问题没?
/lib64/libQt5XcbQpa.so.5
这个库有问题。
于是我把libQt5XcbQpa.so,也放在运行目录下。
奇迹发生了,一切OK了!!!

总结

网上大部分搜到的解决办法,可能都是基于qt5.6之前的,但是qt5.6之后新加了几个库,所以网上的解决办法搜不到,所以才困扰了我这么久。
这次解决问题的关键在于,添加环境变量:export QT_DEBUG_PLUGINS=1
相信遇到此问题,利用这个方法,都可以很快的定位并解决问题了。
最后,祝大家好运!!!

你可能感兴趣的:(学习工作)