LINUX.ORG.RU

Qt не хочет работать с плагинами мультимедиа и картинок на деплойменте

 ,


0

1

Здравствуйте! Написал человеку простую программку для актового зала, ну типа такой пульт управления разными звуками. В программе около 10 окошек. Два дня корпел, всё сделал, всё протестировал, вроде работает.

Но работает только из-под QtCreator, при попытках самостоятельного запуска вообще не работает плагинная подсистема:

  • не работает звук QSound
  • не работает класс медиаплейера
  • совсем не грузятся картинки

Причём, при запуске изнутри консоли MinGW64 MSYS2 такая-же песня. Также не работают вышеуказанные функции.

Вот два скриншота, один - при запуске изнутри QtCreator- https://disk.yandex.ru/i/37WyW5X45F1omQ

Второй - при запуске отдельно и самостоятельно. - https://disk.yandex.ru/i/5XPuM627fSs19w


под вендой попробуй windeployqt находится в инсталяции qt/bin

из консоли собираешь релизную версию затем травишь на релизный бинарник windeployqt

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)

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

EXL ★★★★★
()

Собери статический exe файл или тяни с собой используемые библиотеки.

aiqu6Ait ★★★★
()

виндеплойкуте, конечно, плюсую, но можно и ручками )

можно вайном с WINEDEBUG=+loaddll и дальше выхлоп парсишь на предмет подгруженных библиотек ;)

(мы кроссим под винду на линуксе через мингв, если чо)

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от aol

«мы кроссим под винду на линуксе через мингв, если чо»

Вот и ладненько только это чужое

anonymous
()

Два дня корпел, всё сделал, всё протестировал, вроде работает. Но работает только из-под QtCreator

мощь и сила «я всё сделал» :-)

жаль лор-квотез ушли, можно было-бы перепостить

MKuznetsov ★★★★★
()

читай маны, в них сила, Дюк !

особенно про деплоймент,настройку путей, переменные окружения, плагины и загрузку DLL(.SO)

и читай пожалуйста сам..ты же сам «деньги брал» ?

MKuznetsov ★★★★★
()

Во первых не скопировал все нужные библиотеки/плагины из каталога Qt. Во вторых под виндой надежней использовать MSVC вместо MSYS(2). Понимаю, что сердце просит свободной библиотеки. Но если в проект потребуется добавить какую нибудь библиотеку и собрать ее из исходников, то не каждая библиотека под MSYS соберется. Кроме того, если ты захочешь использовать собранную библиотеку в своем проекте, то опять же, не факт что эта библиотека будет собрана в том числе и для MSYS.

rumgot ★★★★★
()

Есть такая софтина process explorer. Типа прокаченный диспетчер задач. Он умеет показывать список dll, которые загружены процессом.

Запускаешь своё приложение на машине разработчика и через эту софтину смотришь все dll, которые используются.

Ещё есть dependency walker. Это аналог линуксового ldd.

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

Ещё есть dependency walker. Это аналог линуксового ldd.

И надо иметь в виду, что, как и ldd, он не показывает используемые плагины, а только слинкованные библиотеки

annulen ★★★★★
()

вообще не работает плагинная подсистема

Я из плагинов Qt имел дело только с sqldrivers. Там правило такое, что каталог sqldrivers должен лежать там же, где лежит exe-файл твоей программы. С другими типами плагинов (imageformats, например), подозреваю, картина аналогичная.

Выше тебе посоветовали windeployqt, попробуй с ним разобраться.

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

Во вторых под виндой надежней использовать MSVC вместо MSYS(2).

Ну строго говоря, тогда уж вместо MINGW, MSYS — это вся среда. Ты даёшь человеку слишком сильный и спорный совет. Он тебе ещё не сказал, какие ему библиотеки вообще нужны, может, у него весь проект Qt-only.

В принципе, в каких-то случаях резон использовать для виндосборок именно компилятор от майкрософта имеется. Но за это решение тоже надо платить и тащить рантаймы от этого компилятора придётся. Не уверен, что это более простое и особенно более надёжное решение.

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

Про что речь, про DoubleContact? Нет, не забросил, только времени, как всегда, не хватает, последний коммит был ровно месяц назад. И для него виндосборки я, кстати, делаю со статически собранной Qt. Для проекта из одного монолитного EXE-файла это получается экономнее, чем DLL-и тащить.

Но там никаких sqldrivers нет, это в других проектах было, которые не в свободном доступе.

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

С точки зрения простоты я бы сказал, что Visual Studio проще поставить, чем MSYS. Хотя и не намного. CMake умеет и с тем и с тем работать. Поэтому в целом собирать свой проект через CMake что вместе с MSVC, что с MSYS однохренственно. Но вот некоторых библиотек готовых собранных под MSYS не найдешь и тогда возникнет проблема. И вот исходя из этого, если рассматривать с позиции «а что если вдруг понадобится…» MSVC в винде окажется проше с позиции возможного добавления в проект новых зависимостей.

rumgot ★★★★★
()

Кстати еще одно неочевидное замечание (а может и очевидное, тут уж кому как). Характерно для плагинов Qt (то что лежит в каталоге plugins/). Причем это характерно как для Linux версий Qt так и для Windows.

Исполняемый файл (.exe в случае винды) зависит напрямую от некоторых Qt библиотек (.dll в винде) так и от плагинов Qt (библиотеки из каталога plugins). Так вот еще что. Сами плагины из каталога plugins (которые также являются библиотеками) также могут зависеть от других библиотек (как из каталога с библиотеками Qt так и извне). Например плагин plugins/sqldrivers/qsqlmysql.dll зависит от библиотеки c:/program files/mysql/mysql server 8.0/lib/LIBMYSQL.DLL. При этом сам исполняемый файл спокойно может быть запущен без наличия этой библиотеки и не будет ошибки запуска приложения (просто работать с MySQL будет невозможно и будут соответствующие сообщения в выводе приложения). Также может оказаться, что некоторым используемым плагинам Qt нужны некоторые библиотеки из состава самой Qt которые при этом не нужны самому исполняемому файлу.

Говоря про инструменты. Упомянутый windeployqt не всегда у меня копировал ВСЕ нужное библиотечное хозяйство (однако копировал большинство, т.е. прям каждую библиотеку вручную искать не нужно с ним). Также упомянутая утилита Dependency Walker может помочь в поиске зависимостей. Еще для особо преданных ценителей CMake (как я) зависимости исполняемого файла и библиотек можно анализировать средствами самого CMake при организации сборки/установки.

Короче говоря здесь поле для деятельности богатое и иногда чтобы докопаться до причин проблемы нужно прошерстить не только библиотеки, с которыми слинкован сам исполняемый файл, но и также библиотеки с которыми слинкованы плагины Qt.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 8)
Ответ на: комментарий от rumgot

собранных под MSYS

По-моему, ты всё-таки путаешь MSYS и MinGW. Компилятор — это именно MinGW.

некоторых библиотек готовых

Каких именно? Навскидку, если я ничего не путаю, ffmpeg на ныне покойном zeranoe.com (на который страждущие виндосборок отсылались с ffmpeg.org) собирался майкрософтовским компилятором. Но при этом вполне можно было собрать и с MinGW, проблемой это не было. Сейчас виндосборки ffmpeg делают другие команды, чем собирают — не знаю.

И в Qt сборка через MinGW поддерживается давным-давно, не знаю, как сейчас, а до огораживания офлайнового инсталлятора Qt SDK сам MinGW прямо из этого инсталлятора и ставился, вместе с QtCreator-ом и собственно библиотеками.

P.S. А про зависимости плагинов ты правильно написал. В случае с теми же sqldrivers программа просто даёт ошибку «Driver not loaded», и непонятно, сам ли плагин она не видит, или какой-нибудь libpq в случае PostgreSQL (а то и какой-нибудь libiconv, нужный этому libpq, хе-хе-хе). Поле тут действительно непаханое, иногда — минное.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

По-моему, ты всё-таки путаешь MSYS и MinGW. Компилятор — это именно MinGW.

Да. Я знаю. Но я пишу именно MSYS (конкретнее MSYS2) чтобы указать, что я использую именно это окружение для работы с MinGW. Т.к. использовать MinGW без MSYS - это вообще мазохизм (тут уж точно проще MSVC установить).

Каких именно?

Ну вот из последнего, что мне было нужно. Нужна мне была старая OpenCV 3.1.0 - собственно в собранных релизах версии только под MCVC.

И в Qt сборка через MinGW поддерживается давным-давно, не знаю, как сейчас, а до огораживания офлайнового инсталлятора Qt SDK сам MinGW прямо из этого инсталлятора и ставился, вместе с QtCreator-ом и собственно библиотеками.

Qt - согласен, тут есть собранные версии под разные компиляторы, но я больше про другие библиотеки.

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

Ещё можно использовать виндовый side-by-side механизм, приложив файл manifest.

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

Из состава mingw64. Точное название не помню

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