Как правило программы пишутся для того чтобы их впоследствии распространять. Либо в открытом доступе, либо локально (например, внутри компании).
Как сделать, чтобы пользователь мог работать с программой, написанной на Qt, на своём компьютере?
Подготовку программы на Qt к распространению можно условно разделить на два этапа:
- Компиляция программы в «релиз»;
- Комплектация программы необходимыми библиотеками.
Рассмотрим оба этапа применительно к Qt 5.7 с компилятором MinGW для операционной системы Windows.
Компиляция программы в «релиз»
Существуют два основных варианта компиляции приложения:
- Отладка;
- Выпуск («релиз»).
Отладочный вариант используется только на этапе разработки и не предназначен для распространения. Кроме того, при комплектации библиотеками для отладочного варианта последние должны иметь суффикс « d » в названии.
Поэтому программу перед распространением необходимо скомпилировать в варианте «Выпуск» («релиз»).
Урок 2 — Первая Windows программа на Qt
Выбрать нужный вариант компиляции можно непосредственно в рабочем окне QtCreator как показано на скриншоте.
После выбора варианта компиляции и её последующего запуска, программа будет скомпилирована соответствующим образом.
Комплектация библиотеками
После компиляции программы её следует обязательно укомплектовать необходимыми библиотеками.
Дело в том, что в папке со скомпилированной программой находится только исполняемый файл (exe). В таком виде программа будет работоспособна только при запуске из QtCreator, что для обычного пользователя совершенно не приемлемо (да и для самого разработчика не всегда удобно).
Конкретный перечень необходимых библиотек зависит от проекта. Ниже приведён список самых основных из них (которые требуются для запуска любого Qt приложения).
Библиотеки собственно Qt:
- Qt5Core. dll;
- Qt5Gui.dll;
- Qt5Widgets.dll.
Их, а также другие библиотеки Qt можно найти в папке : папка_установки_QtToolsmingw530_32bin
Служебные библиотеки компилятора:
- libgcc_s_dw2-1. dll;
- libstdc++-6. dll;
- libwinpthread-1.dll.
Их можно найти в папке: папка_установки_Qt5.7mingw53_32bin
Для того чтобы укомплектовать своё приложение необходимыми библиотеками достаточно просто скопировать их в папку с исполняемым файлом.
После этого программа будет готова к распространению и можно приступать к созданию инсталлятора или просто упаковать приложение вместе со всеми библиотеками, например, в zip архив.
Обратите внимание!
Библиотеки для приложения следует копировать именно из папок mingw, а не QtCreator. В последнем случае программа будет укомплектована библиотеками, которые предназначены только для QtCreator и, как следствие, может в итоге оказаться неработоспособной.
Источник: streletzcoder.ru
Перенос проекта
Как запускать приложения Qt 5 на других компьютерах (Windows 7)
Я разработал простое приложение с Qt 5.0.2 на Windows 7 Ultimate. В качестве компилятора QtCreator использовал MSVC2012_64bit. И я не могу перенести приложение на другой компьютер. Это не работает. Для приложения Qt требуются DLL, которые я не могу найти. Исследователь зависимостей считает, что .dll ниже не найден. Где я могу их найти? Почему эта проблема настолько распространена?
Все люди жалуются, что не могут получить свой .exe , который разработан с помощью Qt, работать на другом компьютере. EDIT1: Кстати, когда я добавил DCOMP.dll , загруженный из Интернета, не найденные DLL становятся в 2-3 раза больше, чем сейчас:) EDIT2: Также обратите внимание, что на другом компьютере (Windows 7 Home Premium), когда я дважды нажимаю на exe файл, он показывает, что он загружается и не действует, никакой ошибки вообще нет.
Narek 24 апр. 2013, в 19:53
Поделиться
Так это работает на вашем компьютере? Почему вы не используете Process Explorer, чтобы получить список всех библиотек DLL, которые загружаются во время выполнения?
sashoalm 24 апр. 2013, в 17:49
Да, конечно! Но я не могу запустить EXE на других компьютерах. И я не могу найти эти DLL в моем компьютере. Так странно.
Narek 24 апр. 2013, в 17:50
Почему вы не используете Process Explorer, чтобы получить список всех библиотек DLL, которые загружаются во время выполнения? Например, когда вы запускаете свою программу на компьютере , где она работает, предположительно. Я имею в виду, установить Process Explorer на свой компьютер и сделать это. Кроме того, MSVC не распечатывал все загруженные библиотеки, например сообщения ‘rundll32.exe’: Loaded ‘C:WindowsSystem32dwmapi.dll’, Cannot find or open the PDB file
sashoalm 24 апр. 2013, в 17:51
Я установил Process Explorer. Как это помогает увидеть, что dll и откуда он загружается?
Narek 24 апр. 2013, в 17:57
Хорошо, хорошо, я нашел. Ctrl + D. Но эти dll около 50 🙁
Narek 24 апр.
2013, в 17:59
Я думаю, что connected.exe всегда перечисляет некоторые поддельные библиотеки DLL, которые, как утверждается, отсутствуют, но которые на самом деле не нужны. Начните с библиотек Qt, других библиотек, которые вы явно добавили, и среды выполнения MSVC.
Frank Osterfeld 24 апр. 2013, в 18:04
Файлы pdb не нужны (используются для отладки путем предоставления символов), поэтому вы можете игнорировать эти предупреждения.
drescherjm 24 апр. 2013, в 18:33
Этот другой компьютер — 64-битный компьютер с Windows? Отсутствующие библиотеки DLL выглядят как стандартные элементы Windows. Ваш 64-битный exe не может работать на 32-битном компьютере.
Источник: overcoder.net
Запуск скомпилированной программы на другой ubuntu?
Добрый день. Скомпилировал программу в qt creator с использованием либ opencv.
Скопировал на другой компьютер папку релиза, выдает ошибку в отстувии библиотек, скопировал в эту папку необходимые либы, всё равно ошибка, скопировал в /usr/local/lib та же хрень.
Так же делал sudo ldconfig — v.
Привык что в винде при переносе можно все dll просто в папку с exe закинуть и всё работает, а здесь какая-то засада.
Не буду же я компилить opencv на каждой машине где прогу запустят?
- Вопрос задан более трёх лет назад
- 1824 просмотра
3 комментария
Простой 3 комментария
можно все dll просто в папку с exe закинуть и всё работает
тут аналогично
sim3x, такой подход не работает.
tldp.org/HOWTO/Program-Library-HOWTO/shared-librar.
You can use gcc’s -L flag in simple cases. You can use the «rpath» approach (described above), particularly if you only have a specific program to use the library being placed in a «non-standard» place.
Решения вопроса 0
Ответы на вопрос 7
Жил-был у бабушки серенький троллик.
В первую очередь забудьте пожалуйста вот это —
что в винде
Что было в винде, то осталось в винде. В линухе другой подход. Здесь не будут автоматом грузиться левые либы.
1. Проверьте, что в /etc/ld.so.conf.d есть файлик (имя любое), содержащий строку:
/usr/local/lib
Если не было, создайте и уже потом ldconfig. Проверить, что нужные либы система увидела, можно через ldconfig -p
2. Если используется opencv, то на целевой машине должен стоять OpenCV — а Вы думаете, менеджеры пакетов, которые автоматически разрешают и ставят зависимости — просто так придумали, от скуки?
3. Вы еще и автоматически детектить его должны через configure и ошибку выдавать вменяемую, что OpenCV не обнаружен — это если программа будет только в сырцах распространяться. А если пакетами — то ее поставит соответствующий пакетный менеджер, для чего ему должны быть конечно выданы указания 🙂
Ответ написан более трёх лет назад
Нравится 4 2 комментария
. Что было в винде, то осталось в винде. В линухе другой подход. Здесь не будут автоматом грузиться левые либы.
вот эти ребята не очень согласны )
https://www.ubuntu.com/desktop/snappy
planc, Это проблемы ребят 🙂 Не, может быть в бубунте что-то особенное сделано, я просто не работал в ней никогда. Но приходилось неоднократно таскать наработки между центосами и FreeBSD (не между ними конечно же, а между несколькими центосами и несколькими FreeBSD). Так вот там оказалось проще освоить местные пакетные менеджеры и паковать наработки в пакеты, при установке которых yum или pkg_add сам поставит депенды.
Но здесь конечно у каждого свой Совенок 🙂
Источник: qna.habr.com