История изменений
Исправление ZenitharChampion, (текущая версия) :
Дистрибуция Qt5 это вообще очень интересный вопрос. Например однажды я запустил Unigine Superposition. Там лаунчер на Qt5. Не запускается, и причин не называет. Не помню точно как, но я нашёл отладочную информацию. Не найдена библиотека libGLdispatch. Оказывается, эта библиотека идёт с драйвером NVIDIA, но почему-то она не установилась на мой компьютер вместе с драйвером. Не знаю почему. Возможно, потому что я отказался от использования GLvnd при установке драйвера. И то ли библиотеки Qt5, распространяемые с программой, то ли системный libGL, требует libGLdispatch. Причём ни одна другая программа не требует.
Компилировал я Qt5 сам. Получились красивые бинарники. Почему-то при использовании этих бинарников не работает клавиатура. Почему? А потому что, при компилировании, Qt попросил xkbcommon. Компилирую xkbcommon. Он просит libxcb >= 1.10, а у меня только 1.5. xkbcommon компилируется без поддержки x11. А раз он компилируется без поддержки x11, то клавиатура в приложениях Qt5 не работает.
Ладно, обновляю libxcb до нужной версии, пересобираю xkbcommon с поддержкой x11, пересобираю Qt5. И что вы думаете? Не работает. Ругается в консоль что-то про XKB_CONFIG_ROOT. Если выполнить то, что предлагают в сообщении об ошибке, всё начинает работать. И, как я понимаю, система это запомнит, и больше ничего делать не надо. Но блин, почему первый запуск-то глючит?
Добавил опцию при сборке:
-xkb \
-system-xkbcommon \
-xkb-config-root /usr/share/X11/xkb \
Стало нормально и при первом запуске тоже. Ну блин, а почему сразу не работало нормально? И что кстати делает строка:
%define xkbconfigroot %(pkg-config --variable=xkb_base xkeyboard-config)
, которая стоит в SPEC-файле перед ./configure?
И кстати, если выставить -qt-xkbcommon
вместо -system-xkbcommon
, я надеялся что в этом случае удастся обойтись без обновления libxcb. А вот нет, нифига. А опция -qt-xcb
вместо -xcb
по-идее должна подтянуть libxcb 1.10, но нет, нифига, она подтягивает только xcb-util, но не libxcb!
Дальше. Я комплировал Qt5 как при помощи SPEC-файла с установкой в /usr, так и вручную. RPM-ка в итоге нормально работает, а мой результат компиляции вручную... В общем, я запускаю мою программу на Qt5 на другом компьютере, и там квадратики вместо символов. Запускаю из командной строки, и узнаю, что не найдена директория /home/zenitur/qt5-build/src/fonts. Притом что на целевом компьютере директории /home/zenitur и близко нет. Как оно так скомпилировалось, что местоположение шрифтов оказалось захардкожено на мой «хомяк»?
И это не говоря уж о неободимости таскать вместе с программой - файл libqxcb.so и директорию platforms. Вот было же так просто во времена Qt4, когда можно было просто положить libQt4Core и libQt4Gui, и всё!
Исходная версия ZenitharChampion, :
Дистрибуция Qt5 это вообще очень интересный вопрос. Например однажды я запустил Unigine Superposition. Там лаунчер на Qt5. Не запускается, и причин не называет. Не помню точно как, но я нашёл отладочную информацию. Не найдена библиотека libGLdispatch. Оказывается, эта библиотека идёт с драйвером NVIDIA, но почему-то она не установилась на мой компьютер вместе с драйвером. Не знаю почему. Возможно, потому что я отказался от использования GLvnd при установке драйвера. И то ли библиотеки Qt5, распространяемые с программой, то ли системный libGL, требует libGLdispatch. Причём ни одна другая программа не требует.
Компилировал я Qt5 сам. Получились красивые бинарники. Почему-то при использовании этих бинарников не работает клавиатура. Почему? А потому что, при компилировании, Qt попросил xkbcommon. Компилирую xkbcommon. Он просит libxcb >= 1.10, а у меня только 1.5. xkbcommon компилируется без поддержки x11. А раз он компилируется без поддержки x11, то клавиатура в приложениях Qt5 не работает.
Ладно, обновляю libxcb до нужной версии, пересобираю xkbcommon с поддержкой x11, пересобираю Qt5. И что вы думаете? Не работает. Ругается в консоль что-то про XKB_CONFIG_ROOT. Если выполнить то, что предлагают в сообщении об ошибке, всё начинает работать. И, как я понимаю, система это запомнит, и больше ничего делать не надо. Но блин, почему первый запуск-то глючит?
Добавил опцию при сборке:
-xkb \
-system-xkbcommon \
-xkb-config-root /usr/share/X11/xkb \
Стало нормально и при первом запуске тоже. Ну блин, а почему сразу не работало нормально? И что кстати делает строка:
%define xkbconfigroot %(pkg-config --variable=xkb_base xkeyboard-config)
, которая стоит в SPEC-файле перед ./configure?
И кстати, если выставить -qt-xkbcommon
вместо -system-xkbcommon
, я надеялся что в этом случае удастся обойтись без обновления libxcb. А вот нет, нифига. А опция -qt-xcb
вместо -xcb
по-идее должна подтянуть libxcb 1.10, но нет, нифига, она подтягивает только xcb-util, но не libxcb!
Дальше. Я комплировал Qt5 как при помощи SPEC-файла с установкой в /usr, так и вручную. RPM-ка в итоге нормально работает, а мой результат компиляции вручную... В общем, я запускаю мою программу на Qt5 на другом компьютере, и там квадратики вместо символов. Запускаю из командной строки, и узнаю, что не найдена директория /home/zenitur/qt5-build/src/fonts. Притом что на целевом компьютере директории /home/zenitur и близко нет. Как оно так скомпилировалось, что местоположение шрифтов оказалось закардкожено на мой «хомяк»?
И это не говоря уж о неободимости таскать вместе с программой - файл libqxcb.so и директорию platforms. Вот было же так просто во времена Qt4, когда можно было просто положить libQt4Core и libQt4Gui, и всё!