[linux] qt를 설치하지 않고 Linux에서 qt5 앱을 실행하는 동안“플랫폼 플러그인”xcb“”를로드하지 못했습니다.

Qt5를 사용하는 Linux 용 응용 프로그램을 작성했습니다.

그러나 Qt SDK가 설치되지 않은 Linux에서 실행하려고 할 때 콘솔의 출력은 다음과 같습니다.

플랫폼 플러그인 “xcb”를로드하지 못했습니다. 사용 가능한 플랫폼은 다음과 같습니다.

이 문제를 어떻게 해결할 수 있습니까? 플러그인 파일을 복사해야 할 수도 있습니까? Qt5가 설치된 우분투를 사용하지만 Qt 디렉토리의 이름을 바꾸면 같은 문제가 발생합니다. 따라서 Qt 디렉토리의 일부 파일을 사용합니다.

업데이트 : libqxcb.so 파일을 사용하여 app dir “platforms”폴더에 만들면 앱이 여전히 시작되지 않지만 오류 메시지가 변경됩니다.

플랫폼 플러그인 “xcb”를로드하지 못했습니다. 사용 가능한 플랫폼은 다음과 같습니다.

xcb

어떻게 이런 일이 일어날 수 있습니까? 플랫폼 플러그인을 사용할 수 있지만로드 할 수없는 방법은 무엇입니까?



답변

공유 라이브러리 종속성을 표시하려면 ldd (man ldd)를 사용하십시오. libqxcb.so에서 실행

.../platforms$ ldd libqxcb.so

xcb는 libQt5Core.so.5 및 libQt5Gui.so.5 (및 기타 많은 시스템 라이브러리) 외에도 libQt5DBus.so.5에 의존 함을 보여줍니다. 공유 라이브러리 모음에 libQt5DBus.so.5를 추가하면 계속 진행할 준비가되어 있어야합니다.


답변

앞서 게시 한 것처럼 애플리케이션을 배포 할 때 플랫폼 플러그인을 설치해야합니다. 배포하는 방법에 따라 플랫폼 플러그인 (예 : 플랫폼 / 플러그인 /libqxcb.so)이 런타임에 작동 할 수있는 위치를 애플리케이션에 알리는 두 가지 방법이 있습니다.

첫 번째는 QT_QPA_PLATFORM_PLUGIN_PATH 변수를 통해 디렉토리 경로를 내보내는 것입니다.

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app

또는

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app

내가 선호하는 다른 옵션은 실행 파일과 동일한 디렉토리에 qt.conf 파일을 만드는 것입니다. 그 내용은 다음과 같습니다.

[Paths]
Plugins=/path/to/plugins

이에 대한 자세한 정보는 여기qt.conf 사용에서 찾을 수 있습니다.


답변

5.7Qt 5.5가 사전 설치된 Ubuntu 16.04 LTS에서 Qt 로 컴파일 된 바이너리를 시작하려고했습니다 . 작동하지 않았습니다.

처음에는 ldd여기에서 제안한대로 바이너리 자체를 검사했고 모든 “찾을 수없는”종속성을 “만족”했습니다. 그런 다음이 악명 높은 This application failed to start because it could not find or load the Qt platform plugin "xcb"오류가 발생했습니다.

Linux에서이 문제를 해결하는 방법

먼저 platforms바이너리가있는 디렉토리 를 만들어야 합니다. Qt가 XCB 라이브러리를 찾는 곳이기 때문입니다. libqxcb.so거기에 복사하십시오 . 다른 답변의 저자가 이것을 언급하지 않은 이유가 궁금합니다.

그런 다음 QT_DEBUG_PLUGINS=1환경 변수를 설정 하여 바이너리를 실행하여 어떤 종속성이 libqxcb.so“만족”되지 않았는지 확인할 수 있습니다. ( ldd허용 된 답변에서 제안 된대로 이것을 사용할 수도 있습니다 ).

명령 출력은 다음과 같습니다.

me@xerus:/media/sf_Qt/Package$ LD_LIBRARY_PATH=. QT_DEBUG_PLUGINS=1 ./Binary
QFactoryLoader::QFactoryLoader() checking directory path "/media/sf_Qt/Package/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/media/sf_Qt/Package/platforms/libqxcb.so"
Found metadata in lib /media/sf_Qt/Package/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 329472
}


Got keys from plugin meta data ("xcb")
loaded library "/media/sf_Qt/Package/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/media/sf_Qt/Package/platforms/libqxcb.so" : "Cannot load library /media/sf_Qt/Package/platforms/libqxcb.so: (/usr/lib/x86_64-linux-gnu/libQt5DBus.so.5: version `Qt_5' not found (required by ./libQt5XcbQpa.so.5))"
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted (core dumped)

실패한 libQt5DBus.so.5라이브러리에 유의하십시오 . 라이브러리 경로에 복사하십시오. 제 경우에는 바이너리가있는 동일한 디렉토리였습니다 (따라서 LD_LIBRARY_PATH=.). 모든 종속성이 충족 될 때까지이 프로세스를 반복하십시오.

추신에 대한 이 답변 의 작성자에게 감사드립니다 QT_DEBUG_PLUGINS=1.


답변

Ubuntu 16.04 64 비트. 나는 분명히 아무런 이유없이 문제를 얻었다. VideoLan 인스턴스에서 영화를보기 전날 밤, 그날 밤 VideoLan으로 다른 영화를보고 싶습니다. VLC는 질문에 대한 오류로 인해 실행하고 싶지 않았습니다. 나는 조금 구글을 검색했고 그것이 내 문제를 해결 한 해결책을 찾았다 : 지금부터 VLC는 이전처럼 실행 가능하다. 해결책은 다음과 같습니다.

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

나는 그것의 결과가 무엇인지 설명 할 수 없지만 그것이 누락 된 상징적 링크를 생성한다는 것을 알고 있습니다.


답변

나는 각 답변의 주요 부분을 시도했지만 아무 소용이 없었습니다. 마침내 나를 위해 수정 한 것은 다음 환경 변수를 내보내는 것입니다.

LD_LIBRARY_PATH=/usr/local/lib:~/Qt/5.9.1/gcc_64/lib
QT_QPA_PLATFORM_PLUGIN_PATH=~/Qt/5.9.1/gcc_64/plugins/ 


답변

버전 5부터 Qt는 플랫폼 추상화 시스템 (QPA) 을 사용하여 기본 플랫폼에서 추상화합니다.

각 플랫폼에 대한 구현은 플러그인에 의해 제공됩니다. X11의 경우 XCB 플러그인입니다. 참조 X11 요구 사항에 Qt는을 종속성에 대한 자세한 정보를 얻을 수 있습니다.


답변

아마도 이것이 도움이 될 것입니다. Ubuntu 18.04를 사용하고 있으며 ppa 방법을 사용하여 Krita 를 설치할 때 . 이 오류가 발생했습니다.

이 응용 프로그램은 “”에서 Qt 플랫폼 플러그인 “xcb”를 찾거나로드 할 수 없기 때문에 시작하지 못했습니다.

사용 가능한 플랫폼 플러그인은 linuxfb, minimal, minimalegl, offscreen, wayland-egl, wayland, xcb입니다.

응용 프로그램을 다시 설치하면이 문제가 해결 될 수 있습니다. 중단됨

이 스레드와 다른 웹에서 찾은 모든 솔루션을 성공하지 못했습니다.

마지막으로 저자가 다음과 같은 간단한 명령을 사용하여 qt5의 디버깅을 활성화 할 수 있다고 언급 한 게시물을 찾았습니다.

export QT_DEBUG_PLUGINS=1

이 명령을 추가 한 후 krita를 다시 실행 하면 이제 원인을 알 수있는 것과 동일한 오류가 발생합니다.

libxcb-xinerama.so.0 : 공유 객체 파일을 열 수 없음 : 해당 파일 또는 디렉토리가 없습니다.

이 오류는 “xcb”가 제대로로드되지 않도록합니다. 그래서 해결책은`libxcb-xinerama.so.0 ‘을 설치하는 것입니까? 그러나 명령을 실행할 때 :

sudo apt install libxcb-xinerama

나는 lib가 설치되었습니다. 그래서 나는 오래된 속임수를 사용했습니다.--reinstall

sudo apt install --reinstall libxcb-xinerama

이 마지막 명령이 내 문제를 해결했습니다.