LINUX.ORG.RU

Ошибка при запуске Qt5 приложения

 , ,


1

3

Всем привет. Имеется программа, написанная на Qt5 (если говорить конкретнее - эмулятор консоли 3DO - Phoenix). Он 32-х разрядный. Собственно, из зависимостей у него Qt5 и OpenAL. Создал в директории с эмулятором, каталог lib, куда закинул все необходимые либы. Делаю запуск скриптом с LD_LIBRARY_PATH. При запуске из консоли, ошибка:

This application failed to start because it could not find or load the Qt platform plugin "xcb".

Reinstalling the application may fix this problem.
Aborted
Не могу понять в чём дело. Закинул вроде все необходимые библиотеки. Может кто сталкивался? Есть решение?

Создал в директории с программой каталог platforms, куда закинул libqxcb.so. Теперь вывод такой:

This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от fluorite

Фиг там. Оно в рантайме.

Чувак выше прав, нужно 32-битную libqxcb.so (и её зависимости, а так же, возможно, ещё пару либ) класть в ./platforms.

Это, ИМХО, один из жирнейших минусов Qt5. Сложность деплоя выросла вдвое.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Разумеется. Вот вывод:

        linux-gate.so.1 (0xf770b000)
        libX11-xcb.so.1 => /usr/lib/i386-linux-gnu/libX11-xcb.so.1 (0xf761a000)
        libXi.so.6 => not found
        libxcb-render-util.so.0 => not found
        libSM.so.6 => not found
        libICE.so.6 => not found
        libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xf7614000)
        libxcb-glx.so.0 => /usr/lib/i386-linux-gnu/libxcb-glx.so.0 (0xf75fa000)
        libxcb-render.so.0 => not found
        libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf75d3000)
        libxcb-image.so.0 => not found
        libxcb-icccm.so.4 => not found
        libxcb-sync.so.1 => /usr/lib/i386-linux-gnu/libxcb-sync.so.1 (0xf75cc000)
        libxcb-xfixes.so.0 => not found
        libxcb-shm.so.0 => not found
        libxcb-randr.so.0 => not found
        libxcb-shape.so.0 => not found
        libxcb-keysyms.so.1 => not found
        libxcb-xkb.so.1 => not found
        libxkbcommon-x11.so.0 => not found
        libxkbcommon.so.0 => not found
        libfontconfig.so.1 => not found
        libfreetype.so.6 => not found
        libglib-2.0.so.0 => not found
        libXrender.so.1 => not found
        libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf7477000)
        libQt5DBus.so.5 => not found
        libQt5Gui.so.5 => not found
        libQt5Core.so.5 => not found
        libGL.so.1 => /usr/lib/i386-linux-gnu/libGL.so.1 (0xf735f000)
        libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xf7343000)
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7251000)
        libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf720b000)
        libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf7060000)
        /lib/ld-linux.so.2 (0xf770e000)
        libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf705c000)
        libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf7056000)
        libnvidia-tls.so.340.65 => /usr/lib/i386-linux-gnu/tls/libnvidia-tls.so.340.65 (0xf7051000)
        libnvidia-glcore.so.340.65 => /usr/lib/i386-linux-gnu/libnvidia-glcore.so.340.65 (0xf4abd000)
        libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf4aa7000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf4a8a000)

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

Я правильно понял, что помимо того, что у меня большинство этих библиотек лежит в lib, я их ещё и в platforms должен закинуть?

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

Я правильно понял, что помимо того, что у меня большинство этих библиотек лежит в lib, я их ещё и в platforms должен закинуть?

У тебя они скорее всего 64-ные, а надо доставить собранные под i386.

anonymous
()
Ответ на: комментарий от anonymous

Не, смотрите. Я создал директорию lib, и туда закинул 32-х битные библиотеки, которые просила прога. Скриптом я их подгружаю при запуске. Так вот, я создал ещё директорию platforms, и туда положил libqxcb.so. А среди того, что она просит, есть либы, лежащие в libs. Вот я и уточняю, мне ещё и в platforms те либы кидать?

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

Нет, эти либы никуда кидать не нужно.

EXL ★★★★★
()
Ответ на: комментарий от Sunderland93

Вот и доустанавливай x86-либы, на которые ругается not found

sudo apt-get install libfreetype6:i386 libglib2.0-0:i386 ...

И проверяй ldd.

Хотя проще всего, на мой взгляд, нужно установить какие-нибудь libqt5core:i386 libqt5gui:i386 libqt5widgets:i386 и оно дотянет всё необходимое по зависимостям. Заодно от директории lib можно избавиться совсем.

EXL ★★★★★
()
Ответ на: комментарий от Sunderland93

всякие там отсутсвующие libxcb-image.so.0 и прочие куски xcb должны штатно присутсвовать на целевой платформе. Если их там нет, надо ставить. Если ставить нельзя, то или переходить на 64х, или отказываться от qt5 в проекте.

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

Ты ошибаешься, anonymous.

У него там в выхлопе ldd твёрдо и чётко:

libGL.so.1 => /usr/lib/i386-linux-gnu/libGL.so.1 (0xf735f000)
        libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xf7343000)
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7251000)
        libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf720b000)
        libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf7060000)

Показаны уже установленные в систему 32-битные библиотеки и отсутствующие.

EXL ★★★★★
()
Ответ на: комментарий от MKuznetsov

Должны, но не обязаны

У него проприетарное приложение-эмулятор, которое имеется только для x86_32.

А то, что в системе отсутствуют 32-битные xcb-image, это только плюс, система меньше занимает.

EXL ★★★★★
()
Ответ на: Должны, но не обязаны от EXL

У него проприетарное приложение-эмулятор, которое имеется только для x86_32.

если он хочет ей пользоваться, то должен иметь упомянутый x86_32, то есть поставить нужные либы через пакетный менеджер. В пакетах с либами могут быть конфиги и ресурсы без которых работают криво. И просто накидать *.so в один каталог не прокатит.

MKuznetsov ★★★★★
()
Ответ на: комментарий от Sunderland93

Ты новенький на ЛОРе?

Делаю запуск скриптом с LD_LIBRARY_PATH

И где же текст скрипта??? Ты не подумал что в нём может быть проблема?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Вот скрипт:

#!/bin/sh
ABSOLUTE_FILENAME=`readlink -e "$0"`
DIRECTORY=`dirname "$ABSOLUTE_FILENAME"`
LD_LIBRARY_PATH="${DIRECTORY}/lib"
export LD_LIBRARY_PATH
"${DIRECTORY}/PhoenixEmuProject-2.2" "$@"

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от MKuznetsov

В том и дело, что мне надо потом этот архив распространять. Я также сделал с эмулятором Kega Fusion (либы и скрипт) - всё работает. ePSXe - тоже самое.

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

Добавь ldd «${DIRECTORY}/PhoenixEmuProject-2.2» в предпоследнюю строку, наверняка по факту не хватает одной-двух либ, а не то что ты указал.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft
        linux-gate.so.1 (0xf76fe000)
        libopenal.so.1 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libopenal.so.1 (0xf769d000)
        libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xf7676000)
        libGLU.so.1 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libGLU.so.1 (0xf7601000)
        libQt5OpenGL.so.5 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libQt5OpenGL.so.5 (0xf75a2000)
        libQt5Widgets.so.5 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libQt5Widgets.so.5 (0xf6ea8000)
        libQt5Xml.so.5 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libQt5Xml.so.5 (0xf6e62000)
        libQt5Gui.so.5 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libQt5Gui.so.5 (0xf68e4000)
        libQt5Core.so.5 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libQt5Core.so.5 (0xf63bb000)
        libGL.so.1 => /usr/lib/i386-linux-gnu/libGL.so.1 (0xf62a4000)
        libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xf6288000)
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf6196000)
        libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf6150000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf6132000)
        libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf5f88000)
        librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xf5f7f000)
        /lib/ld-linux.so.2 (0xf7701000)
        libgobject-2.0.so.0 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libgobject-2.0.so.0 (0xf5f21000)
        libglib-2.0.so.0 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libglib-2.0.so.0 (0xf5df9000)
        libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf5ca6000)
        libpng12.so.0 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libpng12.so.0 (0xf5c79000)
        libharfbuzz.so.0 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libharfbuzz.so.0 (0xf5c1c000)
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf5bff000)
        libicui18n.so.52 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libicui18n.so.52 (0xf59dc000)
        libicuuc.so.52 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libicuuc.so.52 (0xf5859000)
        libnvidia-tls.so.340.65 => /usr/lib/i386-linux-gnu/tls/libnvidia-tls.so.340.65 (0xf5854000)
        libnvidia-glcore.so.340.65 => /usr/lib/i386-linux-gnu/libnvidia-glcore.so.340.65 (0xf32c0000)
        libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf32ab000)
        libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xf32a3000)
        libpcre.so.3 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libpcre.so.3 (0xf3231000)
        libxcb.so.1 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libxcb.so.1 (0xf320b000)
        libfreetype.so.6 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libfreetype.so.6 (0xf315a000)
        libicudata.so.52 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libicudata.so.52 (0xf1aed000)
        libXau.so.6 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libXau.so.6 (0xf1ae8000)
        libXdmcp.so.6 => /home/sunderland93/Загрузки/ph22-linux-x86/lib/libXdmcp.so.6 (0xf1ae2000)
This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted
Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Cannot mix incompatible Qt library (version 0x50201) with this library (version 0x50401)

Ага. Частенько такое при деплое бывает. Напишу тут ещё раз, чтобы поисковики проиндексировали, если видите подобную ошибку при запуске, копайте в сторону отсутствующего dbus/QtDbus.

Деплой запутали с этим Qt5 ну просто до ужаса!! Половину библиотек не линкуют, а используют нечто подобное dlopen.

Нафига? Кстати там у тебя могут отлететь форматы изображений в программе. Они тоже выделены в Qt5 в отдельные плагины, смотри директорию plugins/imageformats. Вот зачем так делать? Вообще непонятно. Если делать статическую сборку то все эти -lqico, -lqjpeg, -lqpng подлинковываются.

В итоге разрабы деплоят Qt5-приложения по-разному: кто-то с директорией imageformats, кто-то без.

Бредятина. Кто-то может объяснить, зачем так сделали? Парадокс: статический бинарник приложения на Qt4 (только C++-виджеты) занимает 9MB, а на таком всём из себя модульном Qt5 — 17MB. Нафига такое счастье?

Кто-нибудь знает, как сделать на Qt5 статический бинарь <= 10MB для простой формы? У кого-нибудь получалось? Вообще не понимаю, нафига они разбили QtGui в Qt4 на QtGui и QtWidgets, обе этих библиотеки в сумме больше, чем QtGui в Qt4. И это при этом, что по своей сути виджеты заморожены: новый функционал в них не добавляется. Про линковку QtCore с libicu* в 30МБ скромно промолчу. Короче не рад я вектору развития Qt5. При таких размерах и аппетитах уже возникает выбор между Qt5 и бандлом JavaFX с JVM внутри.

EXL ★★★★★
()
Ответ на: комментарий от EXL

разбили QtGui и QtWidgets

Ибо это отдельные проекты теперь, скажем спасибо что не выкинули вообще а наоборот натянули на новую подсистему.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Ну судя по их рассылке, скоро выкинут Qt Quick 1 (который может не в OpenGL), Qt Script, Qt Webkit (заменят Qt WebEngin'ом и ещё парочку прихватят.

Боюсь скоро Qt останется вообще без виджетов :)

EXL ★★★★★
()
Ответ на: комментарий от EXL

Боюсь скоро Qt останется вообще без виджетов :)

Напротив, я уверен что так как виджеты портировали на общую с Qt Quick графическую подсистему то они буду жить еще даже в Qt 6.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Закинул libQt5DBus.so.5 в platforms. Ничего не изменилось.

Sunderland93 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.