Adelitusn.ru

ПК и Техника
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Qt5 application crashed with error 0xc0000005

Qt5 application crashed with error 0xc0000005

This is very interesting crash and I think it should be considered as Qt bug. This problem arise only under very special circumstances. But one after another.

You will identify this problem when your application stopped/exited immediately after the start without any visible error message. It looks like the application isn’t executed at all. When you check application log (Computer -> manage -> Event viewer -> Windows logs -> Application), you will see Error logs:

Windows applications logs

The most interesting part of this log is crash location: ntdll.dll

At first sight it seems like some problem inside the windows. But the opposite is true, the problem (as almost always) is inside your app ;-).

As the next step, you can try to debug this executable via Visual Studio to see what happens inside. Simply open executable as project together with .pdb files and execute it. Now you can see that application is correctly executed but crashes as soon as it touches Qt library. The location of crash is inside ntdll.dll in RtlHeapFree() function.

Debuging crash in VisualStudio 2013

So the problem is inside the Qt, right? Almost true, but not for the 100%. When I tried to run this application on computers of my colleagues, everything works ok. So why the application doesn’t work on my computer too?

Resolution

The problem is in new Qt5 plugin system. Besides the common Qt5*.dll files which are loaded immediately after the application start, Qt5 is also loading plugins/platform-plugins dynamically when the application is executed. To locate this plugins, Qt5 uses following method to identify directories where to search for plugins:

For some strange reason this library returns as first directory path where Qt5 libraries were compiled and after that location based on the executable. So if your Qt5 path is C:Qt5, this will be the first path where all plugins are searched for, no matter if the correct version of plugin is located in APPplugins or APPplatforms. I think this is serious bug in Qt5.

Where is the problem?

And here we’re getting to the core of the whole problem.

If application is compiled on computer with one compiler and used on second computer which contains the same path to which original computer has installed Qt, the application will load all plugins from your folder instead of itself folder.

In case your computer will contain different version of Qt, different compiler or different platform, application loads incorrect libraries and crashes. Completely, silently and without easy way to determine what’s wrong.

Solution?

The solution is simple, but it isn’t achievable from outside of the Qt library. It would be necessary to Qt as first tried to load libraries from application directory. And only if no plugins were found in application directory, the application would try to search for plugins in Qt directory.

Qt change solution

The simplest way how to fix this issue inside the Qt library would be to rename/update appendApplicationPathToLibraryPaths function to prependApplicationPathToLibraryPaths and change

InApp solution

Unfortunately it isn’t possible to simply change this behavior from your app. All of these operations happen directly in QCoreApplication constructor so if you try to change it after, it’s too late.

Не удалось запустить приложение, потому что не удалось найти или загрузить плагин платформы QT » windows»

Я просмотрел все вопросы, которые, по-видимому, связаны с переполнением стека, и ни одно из решений, похоже, не помогает мне.

Я создаю приложение Qt с этой настройкой:

  • Windows 7 Professional x64
  • Visual Studio 2012
  • на Qt 5.2.0 построен с configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • проект использует QtSingleApplication (qt-solutions)
  • приложение представляет собой 32-битное приложение
  • запустить qmake в со следующим: — makefile-spec win32-msvc2012
  • .pri использует QMAKE_CXX += /D_USING_V110_SDK71_
Читайте так же:
Как обновить Adobe Flash Player в Яндекс.Браузере

Я могу создавать и запускать свою программу на моей машине разработки (отмечено выше); я также могу установить и запустить пакет из каталога Program Files на машине dev.

когда я устанавливаю и запускаю на машине Windows Vista (несколько машин)

  • VC++ redist 2012 11.0.61030.0 установлен
  • VC++ redist 2010 10.0.40219 установлено
  • плюс 2005, 2008 версии redist

(также не удается выполнить чистую установку Windows 7)

Application failed to start because it could not find or load the QT platform plugin «windows»

поэтому я последовал инструкциям и добавил a .платформы / каталог и добавлены qwindows.dll (также добавлен qminimal.dll и qoffscreen.dll); я также добавил libEGL.dll, libGLESv2.dll (хотя я не должен нуждаться в них, я не думаю)

как только я добавил qoffscreen.dll теперь я получаю дополнительные сообщение: Available platform plugins are: offscreen

если я запускаю Dependency Walker, я получаю эту ошибку в списке:

а затем дальше вниз получите:

есть идеи, как исправить эту проблему dll?

11 ответов

ошибка вызвана тем, что программа не может найти qwindows.dll

qwindows.dll должен быть в папке с именем platforms чтобы путь от исполняемого файла к dll был platforms/qwindows.dll

тогда как в моем случае этого было недостаточно. Мне также пришлось добавить следующую строку в начале моего main ()

потом все работало.

Я получил эту проблему и как я ее решал:

используется зависимость walker (http://www.dependencywalker.com/), чтобы увидеть точный путь необходимых библиотек DLL. Попробуйте, потому что оба QtCreator и Qt framework имеют одинаковые библиотеки DLL, и вы должны точно указать используемые. Я скопировал все DLL, необходимые в той же папке, что и приложение.

Я скопировал платформы папок из Qt framework / plugins и скопировал их в ту же папку, что и приложение. Теперь приложение comtained также плагин / платформа / папка со всеми своими DLL

и самый важный шаг в моем случае-создать файл с именем qt.Conf в той же папке, что и приложение . Этот файл должен содержать путь к плагинам. Мой qt.файл conf содержит:

[путь]
Библиотеки.=./ lib / qtcreator
Плагины=Плагины
Imports=imports
Qml2Imports=QML в

приложение может работать на хост-системе, так как Qt bin путь в системе PATH переменной.

существует стандартный инструмент Qt для развертывания приложений Qt в Windows windeployqt чтобы иметь возможность запускать приложение на целевых компьютерах, на которых не установлен Qt.

этот инструмент заботится о зависимостях Qt DLL, делает копию platformsqwindows.dll а также делает копию библиотек, которые вы не можете обнаружить с помощью Зависимость Walker, так как плагины изображений и некоторые другие DLL загружаются во время выполнения.

вам даже не нужно иметь свой Qt bin папка в среде PATH . Самое простое развертывание:

  • копировать причине exe двоичный файл в новую папку
  • открыть cmd консоль в этой папке
  • вызов windeployqt используя полный путь (если он не находится в системе PATH ) и предоставить исполняемый файл, для образец:

в результате у вас есть в этой папке все необходимые библиотеки Qt для запуска приложения.

инструмент windeployqt имеет различные варианты. Он также может позаботиться о размещении qml связанных файлов.

конечно, вы можете иметь также проблемы с MSVC redistributables, но они должны быть развернуты отдельно и установлены один раз в системе.

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

У меня была та же проблема «приложение не удалось запустить, потому что оно не смогло найти или загрузить плагин платформы QT» windows» Я исправил это, скопировав файлы ниже в приложение.exe (мой исполняемый файл приложения) папка,

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог «платформы» с qminimal.dll, qoffscreen.dll, qwindows.файл DLL.

enter image description here

enter image description here

Я надеюсь, что это поможет кому-то

Примечание. эта проблема может и быть вызвано, если путь поиска для qwindows.dll то, что закодировано в вашем приложении, включает путь, по которому вы установили Qt. Рассмотрим следующий сценарий:

  1. я устанавливаю Qt в c:Qt.
  2. я разрабатываю приложение и правильно развертываю его в другом месте.
  3. он работает на любом компьютере правильно, потому что он включает в себя qwindows.dll в подкаталоге.
  4. обновить местных Qt в новый версия.
  5. я снова пытаюсь запустить приложение.

результатом является эта ошибка, потому что qwindows.dll на c:Qt. не найдено до тот, который находится в локальном каталоге, и он несовместим с ним. Очень раздражать.

решение заключается в размещении файла qt.conf в том же каталоге, что и ваш exe-файл. Я не знаю, как этого избежать. Если вы использовали инструмент windeployqt.exe для развертывания приложения, поэтому у вас есть подкаталог под названием platforms , то это достаточно:

для людей, у которых есть эта проблема в будущем — у меня есть грязный маленький хак, работал на меня. Попробовать на свой страх и риск.

выполните все шаги в начальном развертывании (быстро и грязно) [http://wiki.qt.io/Deploy_an_Application_on_Windows]

  1. Закрыть Qt Creator.
  2. скопируйте следующее в C:Deployment версия выпуска MyApp.exe все .dll файлы из C:Qt5.2.1mingw48_32bin все папки от C:Qt5.2.1mingw48_32plugins
  3. (если вы использовали QML) все папки из C:Qt5.2.1mingw48_32qml переименовать C:Qt to C:QtHidden (это превращает ваш компьютер в чистую среду, как и тот, который не имеет Qt установлен).
  4. Запуск C:DeploymentMyApp — . исполняемый.

теперь для взлома —

  1. дублировать папку для безопасности
  2. если ваш файл был в/cat / Deployment, перейдите в /cat удалить Папка развертывания во время.exe все еще работает.
  3. он скажет вам, что он не может удалить некоторые файлы, так сказать, пропустить(или не пропустить)
  4. то ,что у вас осталось, — это список всех.dll-файлы, которые ваш .exe фактически использовал и не мог удалить: список всех файлов и только файлы, которые вам нужно сохранить.

вы можете закрыть .EXE-файл сейчас. Чтобы проверить, нормально ли он развертывается, перейдите в папку, в которой вы его установили, скажем C:/Qt и переименовать его в C:/NotQt (в основном сделайте Qt невидимым для системы). Если он работает сейчас, он будет развертываться на других системах чаще, чем нет.

Ну, я решил свою проблему, хотя я не уверен, в чем разница:

Я скопировал каждую dll из моего каталога qt в оба ./ и. / платформы моего каталога приложений.

приложение прошло мимо ошибки, но затем разбилось.

версия.dll вызывала сбой (отмечено в dependency walker), поэтому я удалил его из обоих мест.

приложение запустилось, поэтому я систематически удалял все ненужные dll.

этот вернула меня в прежнее состояние.

затем я удалил свое приложение и переустановил (только с помощью ./платформ/qwindows.dll файл остается), приложение работает правильно.

поэтому все, что я могу предположить, это то, что у меня была неправильная версия qwindows.dll в каталоге платформ.

У меня такая же проблема: 1. он может работать в VS2010; 2. он может работать в папке с файлами как: приложение.исполняемый платформqwindows.файл DLL .

  1. но не удалось загрузить qwindows на чистую машину с той же ОС, что и развивающаяся.

решено просто переместить папку платформы в плагины: приложение.исполняемый Плагиныплатформqwindows.dll файлы

плюс: qwindows.dll можно переименовать как угодно, как это запрашивается плагином interafce: qt_plugin_query_metadata()

отсутствует qwindows.dll, которые обычно должны быть в платформах, если вы не добавляете:

Если вы не делаете этого кстати, и поместите свои qwindows.dll где — то еще Qt будет искать ваш путь для DLL, что может занять много времени (10s-несколько минут)!

для меня необходимо указать QT_QPA_PLATFORM_PLUGIN_PATH каталог платформ, а затем он работал.

для чего это стоит, это решение также было упоминается на GitHub.

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

Qt 5.1.1: Не удалось запустить приложение из-за отсутствия плагина платформы «windows»

Изменить: некоторые люди начали отмечать мой вопрос как дубликат. Не забывайте, что когда я задавал этот вопрос, существовало много похожих вопросов (см., Например, список ниже). Однако ни один из этих ответов не решил мою проблему . После долгого поиска я нашел комментарий, который игнорировали все пользователи, указывающие на отсутствующую библиотеку. Теперь, много месяцев спустя, комментарий был заменен на ответ. Однако, когда я сам ответил на этот вопрос, я намеревался помочь другим людям, напрямую предоставив решение. Об этом нельзя забывать, и пока что мой ответ помог многим людям. Поэтому мой вопрос точно не повторяется. Кстати: принятый ответ по указанной сверху ссылке не решает проблему !

Да, пользовался поиском:

Однако в моем случае проблема все еще сохраняется. Я использую Qt 5.1.1 с Visual Studio 2012 и разработал свое приложение для Windows 7 с Qt Creator 2.8.1. Приложение скомпилировано в режиме «Release» и может быть выполнено, если оно запущено напрямую с Qt Creator.

Однако при запуске из папки «release» я получаю следующее сообщение:

Это приложение не удалось запустить, потому что оно не могло найти или загрузить «окна» плагина платформы Qt. Доступные плагины платформы: минимальные, закадровые, окна.

Структура папки выглядит так:

Платформы — это папка, напрямую скопированная из Qt Qt5.1.1 5.1.1 msvc2012 plugins platform, включая, например, qwindows.dll. Не имеет значения, переименовал ли я его в «платформу», как это сделали некоторые другие пользователи. Qt все еще не находит «окна плагинов платформы», в чем моя ошибка?

Хорошо, как написано здесь https://stackoverflow.com/a/17271172/1458552 без особого внимания со стороны других пользователей:

LibEGL.dll не хватало! Хотя об этом не сообщалось при попытке запустить приложение (сообщалось обо всех других * .dll, таких как Qt5Gui.dll).

Я создал каталог платформ рядом с местом расположения исполняемого файла и поместил внутрь qwindows.dll, но по-прежнему получал сообщение об ошибке «Не удалось загрузить плагин платформы» Windows. Доступные платформы: Windows ».

Я скопировал qwindows.dll из C: Qt Qt5.1.1 Tools QtCreator bin plugins platform, что не подходит. Я просмотрел журнал отладки при запуске в Qt Creator и обнаружил, что мое приложение просматривало C: Qt Qt5.1.1 5.1.1 mingw48_32 plugins platform, когда оно запускалось в отладчике.

Когда я скопировал из C: Qt Qt5.1.1 5.1.1 mingw48_32 plugins platform, все работало нормально.

В выпуске, вероятно, отсутствует библиотека / плагин или библиотека находится в неправильном каталоге или из неправильного каталога.

Предполагаемый ответ Qt: используйте windeployqt . см. последний абзац для объяснения

Создайте папку с именем «platform» в том же каталоге, что и файл application.exe. Скопируйте и вставьте qwindows.dll, который находится в каталоге / bin того компилятора, который вы использовали для выпуска своего приложения, в папку «platform». Как по волшебству это работает. Если .dll там нет, проверьте plugins / platform / (где plugins / находятся в том же каталоге, что и bin /) <- Комментарий PfunnyGuy.

Похоже, что распространенная проблема заключается в том, что .dll был взят из неправильного бункера компилятора. Обязательно скопируйте файл qwindows.dll из того же компилятора, который использовался для выпуска вашего приложения.

Qt поставляется с консольными приложениями платформы, которые будут добавлять все зависимости (включая такие, как qwindows.dll и libEGL.dll) в папку вашего развернутого исполняемого файла. Это предполагаемый способ развертывания вашего приложения, поэтому вы не пропустите ни одной библиотеки (что является основной проблемой для всех этих ответов). Приложение для Windows называется windeployqt . Вероятно, для каждой ОС существует приложение консоли развертывания.

У меня сработала установка QT_QPA_PLATFORM_PLUGIN_PATH переменной среды на% QTDIR% plugins platform .

Об этом также упоминалось здесь и здесь .

Я столкнулся с этим, и ни один из ответов, которые я не мог найти, не помог мне.

У моего коллеги Qt (5.6.0) установлен на его машине по адресу: C: Qt Qt5.6.0 5.6 msvc2015 plugins.
У меня Qt (5.6.2) установлен в том же месте.

Я узнал из этого сообщения: http://www.tripleboot.org/?p=536 , что Qt5Core.dll имеет местоположение для плагинов, записанных в него при первой установке Qt. Поскольку каталоги моего коллеги и Qt были одинаковыми, но были установлены разные версии Qt, необходим другой файл qwindows.dll. Когда я запускал развернутый им exe-файл, он использовал мой файл C: Qt Qt5.6.0 5.6 msvc2015 plugins platform qwindows.dll вместо того, который находится рядом с исполняемым файлом в подпапке. Platform.

Чтобы обойти это, я добавил в приложение следующую строку кода, которая, кажется, вынуждает его искать подпапку «платформы» рядом с исполняемым файлом, прежде чем искать путь в Qt5Core.dll.

Я добавил эту строку к основному методу перед вызовом QApplication следующим образом:

создать каталог platforms и скопировать qwindows.dll в него, platforms и app.exe находятся в том же каталоге

cd app_dir mkdir platforms xcopy qwindows.dll platformsqwindows.dll

Структура папки + app.exe + platformsqwindows.dll

Нашел другое решение. Создайте qt.conf в папке приложения как таковой:

А затем скопируйте папку плагинов в папку приложения, и у меня все работает.

Большинство этих ответов содержат хорошую (правильную) информацию, но в моем случае чего-то не хватало.

Мое приложение построено как библиотека (dll) и вызывается приложением, отличным от Qt. Раньше я windeployqt.exe устанавливал библиотеки Qt, платформы, плагины и т. Д. В установочном каталоге, но платформа все равно не находила. После некоторых экспериментов я понял, что рабочий каталог приложения находится в другой папке. Итак, я взял каталог, в котором «жила» dll, GetModuleHandleExA и добавил этот каталог в путь к библиотеке Qt во время выполнения, используя

Это сработало для меня.

Для меня решением было исправить PATH переменную. Он имел Anaconda3 Library bin в качестве одного из первых путей. Этот каталог содержит некоторые библиотеки Qt, но не все. Видимо, это проблема. Перемещение C: Programs Qt 5.12.3 msvc2017_64 bin на передний план PATH решило проблему для меня.

У меня была эта проблема при использовании QT 5.6, Anaconda 4.3.23, python 3.5.2 и pyinstaller 3.3. Я создал программу на Python с интерфейсом, разработанным с использованием QTcreator, но мне пришлось развернуть ее на других компьютерах, поэтому мне нужно было создать исполняемый файл с помощью pyinstaller.

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

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% plugins platform

QTDIR: C: Miniconda3 pkgs qt-5.6.2-vc14_3 Library

Но это решение работало только на моем ПК, на котором в этих папках были установлены conda и qt.

Чтобы решить эту проблему и заставить исполняемый файл работать на любом компьютере, мне пришлось отредактировать «.spec» (файл, сначала созданный pyinstaller), включив в него следующую строку:

datas = [(‘C: Miniconda3 pkgs qt-5.6.2-vc14_3 Library plugins platform * .dll’, ‘platform’),]

Это решение основано на ответах Джима Г. и CrippledTable.

У меня была такая же проблема, и я решил ее, применив несколько вещей. Первый, если это программа, которую вы сделали на Qt.

В папке (в моем случае) «C: Qt Qt5.10.0 5.10.0 msvc2017_64 plugins» вы найдете другие папки, одна из них — «платформы». Эта папка «платформы» будет скопирована рядом с исполняемым файлом .exe. Теперь, если вы получите ошибку 0xc000007d, это значит, что вы не скопировали ту версию, которая была, поскольку она может быть 32-битной или 64-битной.

Если вы продолжите с ошибками, вам не хватает дополнительных библиотек. С помощью программы «Dependency Walker» вы можете обнаружить некоторые из недостающих папок. Конечно, он укажет вам, что вам нужен NVIDIA .dll, и сообщит вам его местоположение.

Другой способ вместо использования «Dependency Walker» — скопировать все .dll из папки «C: Windows System32» рядом с исполняемым файлом. Запустите свой .exe, и если все загружается хорошо, поэтому у вас нет места в библиотеках dll, которые вам не нужны или не используются, используйте программу .exe со всеми вашими параметрами и, не закрывая .exe, который вы делаете, сотрите все. dll, который вы только что скопировали рядом с .exe, поэтому, если эти .dll используются вашей программой, система не позволит вам стереть, а удалит только те, которые не нужны.

Надеюсь, это решение вам пригодится.

Помните, что если ваша операционная система 64-битная, библиотеки будут в папке System32, а если ваша операционная система 32-битная, они также будут в папке System32. Это происходит для того, чтобы не возникало проблем совместимости с 32-битными программами на 64-битном компьютере. Папка SysWOW64 содержит 32-битные файлы в качестве резервной копии.

Для платформы MinGW и если вы компилируете цель отладки вручную созданным специально написанным CMakeLists.txt, вам также необходимо добавить qwindows.dll в каталог платформы. Исполняемый файл windeployqt хорошо справляется со своей работой, но кажется, что по какой-то странной причине сборка CMake также нуждается в варианте выпуска. Таким образом, было бы лучше иметь и qwindows.dll, и qwindowsd.dll в каталоге вашей платформы. Я не заметил такого же странного результата при импорте проекта CMake в QtCreator и последующем запуске процедуры сборки. Компиляция в командной строке проекта CMake, похоже, вызывает зависимость qwindows.dll, если правильный для цели отладки установлен на месте (qwindowsd.dll)

Используйте этот командный файл: RunWithQt.bat

  • чтобы использовать его, перетащите файл gui.exe и поместите его в RunWithQt.bat в проводнике,
  • или позвоните RunWithQt gui.exe из командной строки

Если у вас установлена ​​Anaconda, я рекомендую вам удалить ее и попробовать установить пакет python из исходного кода, я исправил эту проблему таким образом

Приложение qtbase / bin / windeployqt.exe автоматически развертывает ваше приложение. Если вы запускаете приглашение с правильно установленными переменными envirenmentvariables, оно развертывается в текущем каталоге. Вы найдете пример сценария:

Допустим, вы хотели иметь портативные CGAL-Demos . Таким образом, у вас будет папка «CGAL», а в ней 1 подпапка с именем «lib»: сюда идут все (общие) вспомогательные DLL для любых программ в папке CGAL. В нашем примере это будет Dll-Download : просто разархивируйте в каталог «lib». Чем дальше вы прокручиваете страницу с демонстрациями , тем более впечатляющим будет контент. В моем случае многогранник-демонстрация казался правильным. Если это работает на моем ноутбуке 10+, я впечатлен. Итак, я создал папку «demo» в каталоге «CGAL» вместе с «lib». Теперь создайте в этой папке .cmd-файл. Я назвал свой «Polyhedron.cmd». Итак, у нас есть такая структура каталогов:

В этом небольшом примере «Polyhedron.cmd» содержит следующий текст:

Разумеется, все скрипты могут быть одинаковыми, за исключением последней строки. Единственное предостережение: «Окно DOS» остается открытым, пока вы используете реальную программу. Закройте окно оболочки, и вы также убьете * .exe. Где бы вы ни копировали папку «CGAL», странная «%

Qt 5: подготовка программы для windows к запуску на других компьютерах

Расскажу, как запустить программу, написанную на C++/Qt для windows, на другом компьютере, где библиотеки Qt 5 не установлены. Вот мы, допустим, установили Qt Creator, создали приложение из одного окна с надписью «Hello World», выбрали для сборки конфигурацию «Выпуск» и нажали заветный зелёный треугольник. Через несколько секунд успешно запустится наша программа. Находим, где же программа лежит. Путь к ней будет примерно такой: D:…Projects2013-09-30_HelloWorldbuild-HelloWorld-Desktop_Qt_5_2_0_MinGW_32bit-ВыпускreleaseHelloWorld.exe. Радоваться рано. Если мы закроем Qt Creator, отправимся по этому пути и попытаемся запустить HelloWorld.exe,то получим следующую ошибку: «Запуск программы не возможен, так как на компьютере отсутствует Qt5Core.dll. Попробуйте переустановить программу.» Точно такая же ошибка возникнет на любом другом компьютере, где мы попытаемся запустить эту программу. Варианты решения:

1. Пересобрать сам Qt, чтобы собранные приложения статически линковались с библиотеками Qt 5 — долго, сложно, программа будет тяжёлая, и заморочки с лицензированием

2. Устанавливать на все компьютеры, где будем использовать программу, библиотеки Qt 5, совместимые с нашей сборкой, и прописывать путь к ним в системной переменной PATH

3. Сложить все необходимые DLL-библиотеки в одну папку с экзешником нашей программы. Получится по сути Portable-версия, которую можно будет хоть с флэшки запускать. Этот способ самый простой, им и воспользуемся.

1. Копируем программу в отдельную папку

2. Запускаем, смотрим имя файла в тексте ошибки

3. Находим этот DLL-файл в папке C:QtQt5.2.05.2.0mingw48_32bin и копируем его рядом с экзешником

4. Возвращаемся к пункту 2 и повторяем до тех пор, пока программа не запустится.

Итого у меня по минимуму получился следующий список DLL-библиотек для Qt 5.2:

  • icudt51.dll
  • icuin51.dll
  • icuuc51.dll
  • libgcc_s_dw2-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll
  • Qt5Core.dll
  • Qt5Gui.dll
  • Qt5Widgets.dll
  • HelloWorld.exe

Всего размер папки получился 42 Мб, вроде как бы многовато для простого Hello World. Кого это не смущает — уже могут делиться своей программой. А я расскажу теперь, как сократить этот объём хотя бы до 16 Мб, не сильно сложно (для сравнения библиотеки Qt4 от известной программы для хранения паролей KeePassX весят 10 Мб). Библиотеки и программу мы будем просто сжимать бесплатным свободным упаковщиком UPX. Порядок действий:

    — версию для windows
  1. Распаковываем скаченный архив
  2. Возвращаемся к нашим DLL-файлам, щёлкаем по каждому правой кнопкой, выбираем «Открыть с помощью» — upx.exe

Вот теперь папка с нашей программой весит 16 Мб, и её содержимое можно спокойно запускать на других компьютерах.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector