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
- Распаковываем скаченный архив
- Возвращаемся к нашим DLL-файлам, щёлкаем по каждому правой кнопкой, выбираем «Открыть с помощью» — upx.exe
Вот теперь папка с нашей программой весит 16 Мб, и её содержимое можно спокойно запускать на других компьютерах.
Запись опубликована 2014-05-01 автором admin в рубрике Без рубрики с метками dll, exe, qt, UPX, windows.
Запуск программы невозможен так как на компьютере отсутствует qt5svg dll origin
This repair tool is designed to diagnose your Windows PC problems and repair them quickly. It scans your PC , identifies the problem areas and fixes them completely.
C++ Application Development Framework
The file Qt5Svg.dll is a 32/64bit Windows DLL module for Qt5 or other related programs. The file and the associated Qt5 software was developed by The Qt Company Ltd.. The file was licensed as Copyright (C) 2017 The Qt Company Ltd..
Qt5Svg.dll file is a critical component for the software to work properly without any problems. You may receive an error message like the ones below that indicates the file is not found or damaged.
- This application failed to start because Qt5Svg.dll was not found.
- The file Qt5Svg.dll is missing or corrupted.
- A required component is missing: Qt5Svg.dll. Please install the application again.
- Error loading Qt5Svg.dll. The specified module could not be found.
- The program can’t start because Qt5Svg.dll is missing from your computer.
To fix the error, you need to copy the missing Qt5Svg.dll file to your system or replace the corrupted dll file with a working one by following the instructions below. There are 5 different versions of the dll file available for download with sizes between 246KB — 304.99KB.
You can download Qt5Svg.dll for free from the download section on this page. After downloading the zip file, unzip it to a convenient location on your computer. In order to fix dll related errors, you need to copy the .dll file to the installation folder of the application/game, or install .dll file directly to Windows (Windows XP, Vista, Windows 7, Windows 10).
Install DLL File to Program Folder
· Copy the extracted Qt5Svg.dll file to the installation directory of the application or game.
· Check if the problem is solved. If the problem persists or you are not sure which software is having problems, install the file directly to Windows system folder.
Register DLL File Using Microsoft Regsvr
· Copy the file to «C:WindowsSystem32»
· You can install the .dll file in both system folders without any problems. In order to complete this step, you must run the Command Prompt as administrator.
· Open the Start Menu and before clicking anywhere, type «cmd» on your keyboard.
· Right-click the «Command Prompt» search result and click the «Run as administrator» option.
· Paste the following command into the Command Line window that opens up and press Enter key.
Version | OS | Size | Language | Download |
---|---|---|---|---|
5.9.5.0 | 32bit | 258.5KB | English | Download |
5.9.2.0 | 32bit | 259.5KB | English | Download |
5.9.3.0 | 64bit | 305KB | English | Download |
5.7.0.0 | 32bit | 248.7KB | English | Download |
5.6.2.0 | 32bit | 249.5KB | English | Download |
5.6.2.0 | 32bit | 246KB | English | Download |
Please note : This is a free download. No guarantees or warranties are given or implied. Please download and install the file at your own risk.
Qt Group is a global software company with a strong presence in more than 70 industries and is the leading independent technology behind millions of devices and applications. The Qt Company Ltd is the developer of 180 dll files in our archive, available for free download, including popular files like Qt5Core.dll, QtCore4.dll, Qt5Widgets.dll, Qt5Gui.dll.
Первый способ — Официальная утилита windeployqt
У Qt есть утилита windeployqt , которая поставляется с Qt и про которую можно прочитать тут http://doc.qt.io/qt-5/windows-deployment.html. Она решает ту же задачу, что и второй способ ниже.
Update 2018. Сейчас библиотека стала работать гораздо лучше. Поэтому ниже будет более подробная инструкция по использованию windeployqt .
Итак, в командной строке перейдите в папку bin того компилятора, под которым вы компилируете приложение в режиме Release . В этой папке должен быть файл windeployqt.exe . Например, у меня в данный момент для MinGW это папка D:Qt5.12.0mingw73_64bin , а для Visual Studio D:Qt5.12.0msvc2017_64bin .
Перейти можно с помощью команды cd :
Скомпилируйте в режиме Release ваше приложение. Для примера я создал простое Qt Widgets Application и скомпилировал под MinGW компилятором:
Найдите папку, в которой находится скомпилированный EXE файл. Например, в моем случае это папка D:HarrixProjectsQtuntitled_buildrelease :
Теперь можно в командной строке вызвать windeployqt с указанием папки с EXE файлом:
Теперь в папке добавились нужные файлы:
Но если попробовать запустить EXE файл, то вылетит ошибка, так как три DLL не скопировались: libwinpthread-1.dll , libstdc++-6.dll , libgcc_s_seh-1.dll . Их нужно вручную скопировать из той же папки, где находится windeployqt.exe :
После этого приложение должно запуститься. Настоятельно рекомендую проверить работоспособность приложения на чистом компьютере без установленной Qt.
Для компилятора Visual Studio алгоритм тот же, но лучше еще добавить параметр —compiler-runtime , например:
Если у вас приложение с использованием QML, то нужен параметр —qmldir с указанием папки, где хранятся .qml файлы:
Стоит обратить внимание на то, что windeployqt может копировать лишние файлы. От них можно избавиться, потихоньку удаляя файлы из папки на чистом компьютере.
Что из себя представляют файлы DLL?
Файлы DLL (“динамически подключаемая библиотека”), такие как qtgui4.dll – это маленькие программы, которые похожи на программы с файлами EXE (“исполняемыми”), которые позволяют множеству программ использовать одни и те же функции (например, печать).
К Примеру, вы запускаете Windows, редактируете документ в Microsoft Word. Необходимо загружать файл DLL, контролирующий печать, только если его функции востребованы – к примеру, когда вы решили распечатать свой документ. Когда вы выбираете “Печать”, Microsoft Word вызывает файл принтера DLL, и он загружается в память (RAM). Если вы хотите распечатать документ в другой программе, например в Adobe Acrobat, будет использоваться тот же самый файл принтера DLL.
3 ответа
Я скомпилировал простой проект Qt 5, успешный в Qt Creator. При запуске из Qt создатель его произведений. Но когда я перенес исполняемый файл в другое место, он выдает следующее сообщение об ошибке на консоли cmd; The program can’t start because Qt5Cored.dll is missing from your computer. Try.
Я портировал существующее приложение Qt4 Qt5 и добавил в это приложение некоторые дополнительные (простые) функции. Старое приложение пришло вместе с libgcc_s_dw2_1.dll libusb-1.0.dll mingwm10.dll QtCore4.dll QtCored4.dll QtGui.dll Теперь, начиная с QtCreator, я могу запустить свое.
Чтобы запустить его за пределами Qt Creator, у вас есть два варианта:
- Скопируйте отсутствующий DLLs в каталог, в котором находится исполняемый файл. Например , если analogclock.exe находится в c:examples , то скопируйте C:Qt5.4mingw491_32binQt5Cored.dll и другие необходимые DLLs в c:examples . Возможно, вам также потребуется скопировать файлы плагинов.
- Добавьте C:Qt5.4mingw491_32bin в переменную среды PATH .
Есть несколько способов скопировать недостающий DLLs:
1. Используйте инструмент Windows Deployment (windeployqt.exe) для копирования необходимых файлов
- Откройте командную строку одним из следующих способов:
- Если вы используете MSVC в качестве компилятора, откройте правильную командную строку Visual Studio. Например, для 32-разрядной версии VS2013 нажмите Start -> Microsoft Visual Studio 2013 -> Visual Studio Tools -> VS2013 x86 Native Tools Command Prompt . Это откроет командную строку с правильно заданной переменной среды VCINSTALLDIR . windeployqt.exe требует, чтобы эта переменная среды скопировала правильный распространяемый исполняемый файл Visual C++.
- Если вы используете MinGW, просто откройте командную строку.
Добавьте двоичный путь Qt и, возможно, путь g++.exe в переменную среды PATH. Если ваш исполняемый файл 32-разрядный, добавьте 32-разрядный двоичный путь Qt, например: c:Qt5.4msvc2013bin . Если ваш исполняемый файл 64-bit, добавьте двоичный путь 64-bit Qt, например: c:Qt5.4msvc2013_64bin . windeployqt.exe скопирует DLLs из этого каталога, поэтому важно, чтобы вы не устанавливали 32-разрядный двоичный путь Qt для исполняемого файла 64-bit, и наоборот. Вам также нужно добавить путь g++.exe , если вы используете MinGW, windeployqt скопирует оттуда lib*.dll.
Запустите windeployqt.exe с вашим исполняемым файлом в качестве аргумента. Напр.:
Проверьте вывод на наличие ошибки или предупреждения. Ниже приведен вывод без ошибок и предупреждений:
2. Вручную скопируйте DLLs
Вы должны скопировать правильный DLLs (32-разрядный или 64-bit). Используйте такой инструмент, как Process Explorer, чтобы найти правильные пути DLL:
- Запустите приложение с Qt Creator / Visual Studio.
- Открытый процесс Explorer.
- В процессе Explorer
- Щелкните исполняемый файл, например calendar.exe
- Нажмите Ctrl+D , чтобы отобразить загруженный DLLs на нижней панели. Эквивалентное меню- View -> Lower Panel View -> DLLs
- На нижней панели щелкните столбец Path для сортировки по пути.
-
Если ваш исполняемый файл использует что-то вроде c:Qt5.4msvc2013pluginsplatformsqwindowsd.dll . Его тоже нужно скопировать. Но скопируйте из каталога platforms , а не plugins . Допустим, полный путь calendar.exe равен c:examplescalendar.exe , тогда qwindowsd.dll следует скопировать в c:examplesplatformsqwindows.dll , а не в c:examplespluginsplatformsqwindows.dll .
Вам также нужно скопировать библиотеку времени выполнения C++. Если вы используете mingw, вам может потребоваться скопировать libgcc_s_dw2-1.dll , libstdc++-6.dll . libwinpthread-1.dll и т. Д. Проверьте процесс Explorer, чтобы убедиться в этом. Если вы используете MSVC, вам необходимо развернуть среду выполнения (например , msvcp120.dll , msvcr120.dll ). В конце, ваша структура каталогов выглядит примерно так:
Я написал программу, которая сохраняет значок исполняемых файлов. когда я получаю значок исполняемых файлов методом ExtractAssociatedIcon и сохраняю его , качество выходного значка будет низким . что я могу сделать? var ico = Icon.ExtractAssociatedIcon(@c:/test.exe); FileStream stream = new.
У меня есть Logitech HD Webcam C270. Я хочу написать простое приложение webcam, и поэтому я попытался скомпилировать пример Qt camera (QtQt5.2.05.2.0msvc2010_openglexamplesmultimediawidgetscamera). Моя dev — система-это виртуальная машина Windows 7 x64 SP1. Если webcam подключен к этому VM.
Простым решением для меня было просто добавить QTDIR C:Qt5.4msvc2017_64 к вашим системным переменным Windows.
- В поле поиска Windows введите ‘env’ и нажмите «Edit the system environment variables»
- Нажмите «Environment Variables» ниже
- В списке системных переменных нажмите «New. «
- Добавьте QTDIR в качестве имени переменной со значением имя каталога компилятора в каталоге Qt: C:Qt5.4mingw491_32 в вашем случае
Ответ, данный fxam , является глубоким и всеобъемлющим. Я пробовал предложенные подходы, и они работают!
Просто добавьте комментарий, что в случае MinGW64 следует запустить windeplyqt.exe в каталоге «C:QtQt5.13.15.13.1mingw73_64bin».
Ответ DrumM — это самое простое решение. Однако в ответе fxam он был упомянут как 1.2.
Решение проблемы с DLL файлом qt5core.dll
Пожалуй создавать какие-то утилиты своими руками – это дело не простое, а особенно для человека, который только начал этим заниматься. Скачать qt5core.dll вы захотели, скорее всего, из-за того, что созданная вами утилита в Qt Creator отказалась запускаться. Даже более того, она выдала вам ошибку, в которой содержится следующая информация:
Запуск программы невозможен, так как на компьютере отсутствует qt5core.dll. Попробуйте переустановить программу.
Точка входа в процедуру***************** не найдена в библиотеке DLL*********qt5core.dll
Что же могло пойти не так? Все довольно просто: вы, вероятно, пытались запустить созданную программу на другом компьютере, либо же не через Qt Creator. Небольшая справка: Qt Creator был создан для того, чтобы облегчить работу с фреймворком Qt, с помощью которого можно писать различные программы на языке C++ и многих других.
Так вот, созданная вами утилита при запуске через Qt Creator получает доступ ко всем необходимым ей библиотекам, в которые, как вы поняли, и входит данный файл. Если вы пытаетесь запустить свою утилиту без Qt Creator, то она не может получить доступ к этой библиотеке и, следовательно, система выдаст вам ошибку, в которой будет говориться, что запуск произвести не удается, так как отсутствует qt5core.dll.
В этом случае можно предпринять несколько шагов, в одном из которых вам потребуется скачать. Давайте структурируем эти шаги:
Первый шаг в списке подразумевает, что вы приобретете лицензию. Второй шаг попросту слишком “замороченный” для исполнения. А вот просто содержать нужные DLL-файлы рядом с EXE’шником – это лучший вариант.
Вы можете скачать файл со ссылки в конце этой статьи, но, вероятней всего, вам потребуется скачать и другие библиотеки. Можете либо следовать за сообщениями ошибки, либо воспользоваться такой удобной утилитой, как Dependency Walker.