即使找到了,也无法在“”中加载Qt平台插件“xcb”

IgN*_*ite 15 qt shared-libraries qt5 conda

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

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)
Run Code Online (Sandbox Code Playgroud)

我尝试过的

  • 我尝试设置export QT_DEBUG_PLUGINS=1并执行一个使用 OpenCV 绘制图像的 Python 脚本。错误信息:
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)
Run Code Online (Sandbox Code Playgroud)
  • 我尝试export LD_LIBRARY_PATH=/opt/Qt5.14.0/5.14.0/gcc_64/lib:$LD_LIBRARY_PATH~/.bashrc文件中设置,但没有解决。
  • 我尝试重新安装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
 ...
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道这些库何时安装(当我安装其他软件包时它们会自动安装。)

  • 接下来,我下载了Qt 离线安装程序并安装到/opt/Qt-5.14.0.
  • 接下来,我使用以下设置编译了 OpenCV 3.4.9。我进行得很顺利,没有出现任何错误。(之后我cv2.so在 conda 环境中设置符号链接以指向 中构建的 OpenCV 库/opt。)
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 \
..
Run Code Online (Sandbox Code Playgroud)

Dav*_*ner 16

这可能是由于缺少库引起的,尽管其他答案中不一定列出了该库。您可以通过以下方法自行解决。

设置环境变量QT_DEBUG_PLUGINS=1,然后运行您的应用程序。这应该会提供有关失败原因的更详细信息。例如,当我用我的应用程序运行它时,我看到:

qt.core.plugin.loader: QLibraryPrivate::loadPlugin failed on "/home/david/work/junk/pywebview-test/.venv/lib/python3.10/site-packages/PySide6/Qt/plugins/platforms/libqxcb.so" : "Cannot load library /home/david/work/junk/pywebview-test/.venv/lib/python3.10/site-packages/PySide6/Qt/plugins/platforms/libqxcb.so: (libxcb-cursor.so.0: cannot open shared object file: No such file or directory)"
Run Code Online (Sandbox Code Playgroud)

这意味着链接到所列库的库可能已丢失。要找出到底是哪一个,请运行以下命令,根据错误消息替换完整路径:

ldd /home/david/work/junk/pywebview-test/.venv/lib/python3.10/site-packages/PySide6/Qt/plugins/platforms/libqxcb.so
Run Code Online (Sandbox Code Playgroud)

在我的计算机上,这显示了一行:

libxcb-cursor.so.0 => not found
Run Code Online (Sandbox Code Playgroud)

所以我安装了缺少的库:

sudo apt install libxcb-cursor0
Run Code Online (Sandbox Code Playgroud)

安装所有缺少的库后,尝试再次运行该应用程序。


小智 6

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

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

为了解决已删除的 pyqt 包,我改用了sudo apt-get install python3-pyqt5python3/site-packages这是有效的,因为 pip 尝试从目录加载 cv2 和 pyqt ,其中 apt-get 的包是从 加载的python3/dist-packages,从而解决了冲突。

我通过研究为什么它与 apt-get (dist-packages) 一起工作以及查看sys.pathpython 解释器内部来推断它。就我而言site-packages继续dist-packages


IgN*_*ite 4

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

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

  • 您是如何找到并删除这些库的? (2认同)