Russian Qt Forum

Qt => Общие вопросы => Тема начата: 8Observer8 от Сентябрь 01, 2014, 14:49



Название: [Решено] Запуск приложений на стороне пользователя
Отправлено: 8Observer8 от Сентябрь 01, 2014, 14:49
Привет!

В релизную папку добавил библиотеки:

- icudt51.dll
- icuin51.dll
- icuuc51.dll
- libstdc++-6.dll
- libwinpthread-1.dll
- Qt5Core.dll
- Qt5Gui.dll
- Qt5SerialPort.dll
- Qt5Widgets.dll

При запуске exe выводится сообщение:
(http://i.pixs.ru/storage/1/8/9/310png_4766756_13662189.png)

Я нагуглил: ссылка (http://www.qtcentre.org/threads/56516-Cound-not-find-or-load-qt-platform-plugin-windows-No-working-solution-yet-!?p=253520#post253520)

Пишут, что должна быть такая структура:
Цитировать
/YourAppInstallFolder
  - YourApp.exe
  - any needed Qt DLLs
  - /plugins
     -/platforms
        - qwindows.dll

Я так и сделал:
(http://i.pixs.ru/storage/2/6/8/314png_9186715_13662268.png)

Но всё равно выводится то сообщение выше.

Заранее спасибо!


Название: Re: Запуск приложений на стороне пользователя
Отправлено: Bepec от Сентябрь 01, 2014, 14:53
Гуглишь плохо. Структура неправильна. /platforms должна быть рядом с exe.


Название: Re: Запуск приложений на стороне пользователя
Отправлено: 8Observer8 от Сентябрь 01, 2014, 15:06
Почему приложение требует "icuin51.dll", а в Qt 5.3.1 есть только "icuin52.dll"? Что делать если я удалил старый Qt?


Название: Re: Запуск приложений на стороне пользователя
Отправлено: Alex Custov от Сентябрь 01, 2014, 15:12
Почему приложение требует "icuin51.dll", а в Qt 5.3.1 есть только "icuin52.dll"?

Очевидно, что приложение собрано с более старой версий Qt.


Название: Re: Запуск приложений на стороне пользователя
Отправлено: 8Observer8 от Сентябрь 01, 2014, 15:45
У меня старый Qt был тоже. Хотя на этапе создания приложения есть выбор... В общем, возможно я в Kit неверно настроил. Решил удалить оба и заново поставить новый.


Название: Re: Запуск приложений на стороне пользователя
Отправлено: Bepec от Сентябрь 01, 2014, 15:54
А обои то в зачем удалять? Компьютер без обоев - это скучно.


Название: Re: Запуск приложений на стороне пользователя
Отправлено: 8Observer8 от Сентябрь 01, 2014, 16:40
А обои то в зачем удалять? Компьютер без обоев - это скучно.
"Оба" SDK :)

Гуглишь плохо. Структура неправильна. /platforms должна быть рядом с exe.
Да, на другой машине, без Qt SDK запускается :)

Для простого GUI приложения (где используется последовательный порт) надо отсюда "c:\Qt\Qt5.3.1\5.3\mingw482_32\bin\" скопировать такие dll к exe:
- platforms/qwindows.dll (отсюда c:\Qt\Qt5.3.1\5.3\mingw482_32\plugins\platforms\)
- icudt52.dll
- icuin52.dll
- icuuc52.dll
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
- Qt5Core.dll
- Qt5Gui.dll
- Qt5SerialPort.dll
- Qt5Widgets.dll


Название: Re: Запуск приложений на стороне пользователя
Отправлено: Fregloin от Сентябрь 01, 2014, 17:34
Вот пример скрипта для InnoSetup который я урезал, но должен работать и у вас. Инсталяхи отлично компилируются и отлично ставятся. ПО работает на многих машинах, на которых не стояло Qt - полет нормальный.

Код:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My App"
#define MyAppVersion "1.0"
#define MyAppPublisher "My Company"
#define MyAppExeName "qtapp.exe"

[Setup]
; NOTD: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{19B8E9AD-1FFA-4977-B96F-D68DD248AE9E}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:\OutputDir
OutputBaseFilename=Setup
SetupIconFile=D:\work\*****\resources\icon.ico
Compression=lzma
SolidCompression=yes

[CustomMessages]
english.MainProgram_Desc=Program Files
english.QtLibs_Desc=Qt Libraries
english.FullInstallation=Full installation
english.CustomInstallation=Custom installation

russian.MainProgram_Desc=Основные файлы
russian.QtLibs_Desc=Библиотеки Qt
russian.FullInstallation=Установка всех компонентов
russian.CustomInstallation=Выборочная установка

[Types]
Name: "full"; Description: "{cm:FullInstallation}"
Name: "custom"; Description: "{cm:CustomInstallation}"; Flags: iscustom

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
Name: "program"; Description:"{cm:MainProgram_Desc}"; Types: full custom; Flags: fixed
Name: "qtlibs"; Description:"{cm:QtLibs_Desc}"; Types: full custom

[Files]
Source: "D:\release\qtapp.exe"; DestDir: "{app}"; Components: program; Flags: ignoreversion
;Core libs
Source: "D:\release\qtdll.dll"; DestDir: "{app}";  Components: program; Flags: ignoreversion

;Qt shared libs
Source: "D:\QtLibs\icudt52.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\icuin52.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\icuuc52.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\libgcc_s_dw2-1.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\libstdc++-6.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\libwinpthread-1.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\Qt5Core.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\Qt5Gui.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\Qt5Network.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\Qt5OpenGL.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\Qt5Widgets.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\Qt5Xml.dll"; DestDir: "{app}"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\platforms\qminimal.dll"; DestDir: "{app}\platforms"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\platforms\qoffscreen.dll"; DestDir: "{app}\platforms"; Components: qtlibs;  Flags: ignoreversion
Source: "D:\QtLibs\platforms\qwindows.dll"; DestDir: "{app}\platforms"; Components: qtlibs;  Flags: ignoreversion


[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon



Название: Re: Запуск приложений на стороне пользователя
Отправлено: 8Observer8 от Сентябрь 01, 2014, 17:59
Fregloin, спасибо! Может осилю когда-нибудь  :) а сейчас что-то со скриптом не так:

(http://i7.pixs.ru/storage/7/1/9/321png_2881751_13664719.png)


Название: Re: Запуск приложений на стороне пользователя
Отправлено: 8Observer8 от Сентябрь 01, 2014, 18:01
Ну, вроде понял, что это примерный скрипт и там надо конкретные данные указывать :)


Название: Re: Запуск приложений на стороне пользователя
Отправлено: vizir.vs от Сентябрь 02, 2014, 08:18
Если ты используешь CMake для сборки приложений, то можно заюзать CPack для сборки установочника. Он ставится вместе с cmake и пишется все в CMakeLists.txt. В итоге у тебя получается установочник и для винды и для линя.


Название: Re: Запуск приложений на стороне пользователя
Отправлено: Fregloin от Сентябрь 02, 2014, 10:54
ну в этом скрипте были указаны мои пути, вам следует указать свои, и все должно заработать.
в линях для своего ПО я использую созданные мною деб пакеты. впринципе там qt можно ставить несколькими способами, но я так понял тема актуальна именно для винды.


Название: Re: Запуск приложений на стороне пользователя
Отправлено: navrocky от Сентябрь 02, 2014, 11:27
Для собирания всех зависимостей используй windeployqt из комплекта Qt SDK


Название: Re: Запуск приложений на стороне пользователя
Отправлено: 8Observer8 от Сентябрь 02, 2014, 11:48
Спасибо! Скорее всего, windeployqt - наилучшее решение!

Может инсталяторы имеет смысл использовать для крупных проектов? А для мелочи всякой достаточно же передать пользователю exe с необходимыми dll. Он уже сам решит: где расположить папку, создать ли ярлык на рабочем столе или закрепить в меню "Start". Кто как думает?


Название: Re: Запуск приложений на стороне пользователя
Отправлено: VPS от Сентябрь 02, 2014, 12:08
Можно ещё попробовать использовать "Enigma Virtual Box" для того, чтобы все файлы в один собрать.