无法在""中加载Qt平台插件"xcb",即使已经找到。

13

这个问题在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并执行一个使用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)
  • 我尝试在~/.bashrc文件中设置export LD_LIBRARY_PATH=/opt/Qt5.14.0/5.14.0/gcc_64/lib:$LD_LIBRARY_PATH,但没有解决问题。
  • 我尝试重新安装Qt5,但没有成功。
  • 人们说我可以使用ldd,但我不太确定应该查看哪些信息。

如果相关

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

我实际上不知道这些库何时被安装(它们在我安装其他软件包时自动安装了)。

  • 接下来,我下载了Qt离线安装程序,并将其安装到/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 \
..
5个回答

13

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

设置环境变量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)"

这表示可能缺少与所列库相链接的库。要找出确切缺失的库,请运行以下命令,并根据您的错误消息替换完整路径:
ldd /home/david/work/junk/pywebview-test/.venv/lib/python3.10/site-packages/PySide6/Qt/plugins/platforms/libqxcb.so

在我的电脑上,这显示了一行:

libxcb-cursor.so.0 => not found

所以我使用以下命令安装了缺失的库:

sudo apt install libxcb-cursor0

一旦安装了所有缺失的库,请尝试再次运行应用程序。


5

我正在使用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 之前。


4
错误似乎是由于Qt库冲突引起的。链接器找不到正确的Qt库(安装在/opt文件夹中),而我的自定义构建OpenCV需要该库在conda虚拟环境中。这是因为虚拟环境中安装了另一个Qt库,使用ldd可以找到它。(抱歉,这是一段时间前的事情,所以我没有输出结果。)
按预期,在虚拟conda环境中删除所有与Qt相关的库后,使用Qt(安装在/opt文件夹中)构建的OpenCV库可以像往常一样正常工作。

2
你是如何找到并移除这些库的? - Duane

2

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接