【问题标题】:Could not load the Qt platform plugin "xcb" in "" even though it was found无法在“”中加载 Qt 平台插件“xcb”,即使它已找到
【发布时间】:2020-05-05 15:51:33
【问题描述】:

这个问题在 Stack Overflow 中被问了好几次。我在几次讨论中尝试了方法,但没有奏效。所以我用自定义Qt 构建的OpenCV 库无法正常工作:

import cv2
img = cv2.imread("IMAGE_PATH")
cv2.imshow("frame", img)

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

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

Aborted (core dumped)

我尝试过的

  • 我尝试设置 export QT_DEBUG_PLUGINS=1 并执行 Python 脚本,让 OpenCV 绘制图像。错误信息:
QFactoryLoader::QFactoryLoader() checking directory path "/home/w/.conda/envs/py36/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/home/w/.conda/envs/py36/plugins/platforms/libqeglfs.so"
Found metadata in lib /home/w/.conda/envs/py36/plugins/platforms/libqeglfs.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "eglfs"
        ]
    },
    "className": "QEglFSIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("eglfs")
QFactoryLoader::QFactoryLoader() looking at "/home/w/.conda/envs/py36/plugins/platforms/libqminimal.so"
Found metadata in lib /home/w/.conda/envs/py36/plugins/platforms/libqminimal.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "minimal"
        ]
    },
    "className": "QMinimalIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("minimal")
QFactoryLoader::QFactoryLoader() looking at "/home/w/.conda/envs/py36/plugins/platforms/libqminimalegl.so"
Found metadata in lib /home/w/.conda/envs/py36/plugins/platforms/libqminimalegl.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "minimalegl"
        ]
    },
    "className": "QMinimalEglIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("minimalegl")
QFactoryLoader::QFactoryLoader() looking at "/home/w/.conda/envs/py36/plugins/platforms/libqoffscreen.so"
Found metadata in lib /home/w/.conda/envs/py36/plugins/platforms/libqoffscreen.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "offscreen"
        ]
    },
    "className": "QOffscreenIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("offscreen")
QFactoryLoader::QFactoryLoader() looking at "/home/w/.conda/envs/py36/plugins/platforms/libqvnc.so"
Found metadata in lib /home/w/.conda/envs/py36/plugins/platforms/libqvnc.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "vnc"
        ]
    },
    "className": "QVncIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("vnc")
QFactoryLoader::QFactoryLoader() looking at "/home/w/.conda/envs/py36/plugins/platforms/libqxcb.so"
Found metadata in lib /home/w/.conda/envs/py36/plugins/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/home/w/.conda/envs/py36/bin/platforms" ...
Cannot load library /home/w/.conda/envs/py36/plugins/platforms/libqxcb.so: (/home/w/.conda/envs/py36/plugins/platforms/../../lib/libQt5XcbQpa.so.5: symbol _ZN11QFontEngine14bitmapForGlyphEj6QFixedRK10QTransform, version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)
QLibraryPrivate::loadPlugin failed on "/home/w/.conda/envs/py36/plugins/platforms/libqxcb.so" : "Cannot load library /home/w/.conda/envs/py36/plugins/platforms/libqxcb.so: (/home/w/.conda/envs/py36/plugins/platforms/../../lib/libQt5XcbQpa.so.5: symbol _ZN11QFontEngine14bitmapForGlyphEj6QFixedRK10QTransform, version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

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

Aborted (core dumped)
  • 我尝试在~/.bashrc 文件中设置export LD_LIBRARY_PATH=/opt/Qt5.14.0/5.14.0/gcc_64/lib:$LD_LIBRARY_PATH,但没有解决。
  • 我尝试重新安装Qt5,但没有成功。
  • 正如人们所说,我尝试使用 ldd,但我不太确定应该查看哪些信息。

如果相关

  • 首先,如果相关,我在 Ubuntu 16.04 上安装了 Anaconda,并创建了一个通用 Python 环境名称 py36,其中安装了多个库。我尝试运行conda list,以下是一些包:
 ...
 pyqt                      5.9.2            py36h05f1152_2  
 qt                        5.9.7                h5867ecd_1
 vtk                       8.2.0           py36haa4764d_200
 ...

我真的不知道这些库是什么时候安装的(当我安装其他软件包时它们会自动安装。)

  • 接下来,我下载了Qt offline installer并安装到/opt/Qt-5.14.0
  • 接下来,我使用以下设置编译了 OpenCV 3.4.9。我进展顺利,没有任何错误。 (之后我在 conda 环境中设置符号链接cv2.so 指向在/opt 中构建的OpenCV 库。)
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/opt/OpenCV/opencv-3.4.9 \
-D CMAKE_PREFIX_PATH="/opt/Qt5.14.0/5.14.0/gcc_64/lib/cmake;/opt/vtk-8.2.0/lib/cmake;/opt/g2o/lib/cmake" \
-D OPENCV_EXTRA_MODULES_PATH=/home/w/OpenCV/opencv-3.4.9/opencv_contrib-3.4.9/modules \
-D PYTHON3_EXECUTABLE=/home/w/.conda/envs/py36/bin/python3 \
-D WITH_OPENGL=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_VTK=ON \
-D WITH_QT=ON \
-D WITH_GTK=ON \
..

【问题讨论】:

    标签: qt qt5 shared-libraries conda


    【解决方案1】:

    错误似乎是Qt 库冲突。链接器找不到我在 conda 虚拟环境中自定义构建的OpenCV 所需的正确的Qt 库(安装在/opt 文件夹中)。这是因为在虚拟环境中安装了另一个Qt 库。这可以通过使用ldd 找到。 (抱歉,是前段时间,所以没有输出。)

    正如预期的那样,通过删除虚拟 conda 环境中的所有 Qt 相关库,使用​​ Qt 构建的 OpenCV 库(安装在 /opt 文件夹中)照常正常工作。

    【讨论】:

    • 您是如何找到并删除这些库的?
    【解决方案2】:

    我在 ubuntu linux 上。 我确保删除了所有与 pyqt5 相关的包,并使用 pip freeze (pip freeze | grep -i qt) 检查了它们是否存在。

    我不确定它是如何解决问题的,但我认为 pip 加载包存在一些内部冲突。

    为了解决被移除的 pyqt 包,我使用了sudo apt-get install python3-pyqt5。 这是可行的,因为 pip 尝试从 python3/site-packages 目录加载 cv2 和 pyqt,而来自 apt-get 的包是从 python3/dist-packages 加载的,因此冲突得到解决。

    我通过查看它为什么与 apt-get (dist-packages) 一起工作以及查看 python 解释器中的 sys.path 来推断它。在我的情况下site-packages 继续dist-packages

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-25
      • 2022-08-11
      • 2016-01-08
      • 2021-09-03
      • 1970-01-01
      • 2019-10-09
      • 2021-07-20
      • 2015-08-06
      相关资源
      最近更新 更多