Я спробував запустити свій двійковий файл, скомпільований з Qt 5.7
, на Ubuntu 16.04 LTS, де 5.5
попередньо встановлений 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=.
). Повторюйте цей процес, доки не будуть задоволені всі залежності.
PS дякую автору цієї відповіді за QT_DEBUG_PLUGINS=1
.