Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Слепой Уфолог
3 / 3 / 0
Регистрация: 04.09.2013
Сообщений: 18
1

Развертывание приложений на windows для Linux юзеров

15.09.2013, 20:52. Просмотров 1415. Ответов 12
Метки нет (Все метки)

Доброе утро!

Начав учитывать и windows для создания приложений я понял что тут совсем другой подход к установке (развертыванию) программы - т.е. заставить Qt5 прогу работать при двойном щелчке по екзешке.
Под Линукс нужно знать только названия dependencies и ОС сама позаботится, типа "apt-get install bla-bla" и все, не нужно знать про .so (DLL) искать их как грибы и все такое. А в windows (7) по ходу гораздо сложнее - нужно искать и копировать DLLы (компилятора, Qt и...) вручную в папку с exe своего приложения.

Есть ли где-то объяснения (туториал) этих видновских явлений с точки зрения Linux юзера?

Я например также не понимаю почему при установке Qt он не устанавливает свои DLL в "системные" папки windows, ведь под windows Qt прога запускается из QtCreator а если двойным щелчком то выдает рантайм еррор, в линуксе такой проблемы нету.

Edit: да, читал 3 поста сверху "Важно" - там несколько другое и без объяснений почему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 20:52
Ответы с готовыми решениями:

Установка Qt на Linux для кросс-компиляции: Linux 32/64 Windows 32/64
В силу объективных причин пришлось перейти на Linux, но столкнулся с проблемой...

Установка среды QtCreator для создания linux и android приложений
1. Скачиваем файлы: qt installer http://www.qt.io/download-open-source/...

Реализация проекта как для Linux, так и для Windows
Всем доброго времени суток, прошу дать мне совет, наставить на путь истинный и...

Разные функции для Windows и Linux
Подскажите как можно исправить что бы не приходилось постоянно исправлять...

Родное окно для Windows, Linux, macOS
Привет, возможно ли реализовать полностью собственный интерфейс окна с флагом...

12
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
15.09.2013, 20:58 2
Цитата Сообщение от Слепой Уфолог Посмотреть сообщение
Я например также не понимаю почему при установке Qt он не устанавливает свои DLL в "системные" папки windows, ведь под windows Qt прога запускается из QtCreator а если двойным щелчком то выдает рантайм еррор, в линуксе такой проблемы нету.
в windows тру вей - когда приложение устраивает файловую помойку вокруг своего приложения (загрузка DLL происходит по переменной окружения PATH, первая в очереди папка - .). Связано это с отсутствием какой-либо версионности, что в случае загрузки из системных путей приводит к известному dll hell

в винде приложения часто ставят даже runtime c++ библиотеки, ну вот так оно там
2
Dmitriy_M
1429 / 1309 / 131
Регистрация: 20.03.2009
Сообщений: 4,678
Записей в блоге: 11
15.09.2013, 21:38 3
Цитата Сообщение от Слепой Уфолог Посмотреть сообщение
Я например также не понимаю почему при установке Qt он не устанавливает свои DLL в "системные" папки windows, ведь под windows Qt прога запускается из QtCreator а если двойным щелчком то выдает рантайм еррор, в линуксе такой проблемы нету.
Вот не надо про "в линуксе такой проблемы нету". Проприетарный софт распространяться так же.
Засорять системные папки плохое решение, т.к. программы собраны разными компиляторами с разными версиями Qt, что может привести к DLL hell.
0
fasked
15.09.2013, 21:39
  #4

Не по теме:

Цитата Сообщение от alex_x_x Посмотреть сообщение
загрузка DLL происходит по переменной окружения PATH
По рукам надо бить тех, кто так делает, особенно, если в SYSTEM PATH.

0
Dmitriy_M
1429 / 1309 / 131
Регистрация: 20.03.2009
Сообщений: 4,678
Записей в блоге: 11
15.09.2013, 21:41 5
Цитата Сообщение от Слепой Уфолог Посмотреть сообщение
Под Линукс нужно знать только названия dependencies и ОС сама позаботится, типа "apt-get install bla-bla" и все, не нужно знать про .so (DLL) искать их как грибы и все такое. А в windows (7) по ходу гораздо сложнее - нужно искать и копировать DLLы (компилятора, Qt и...) вручную в папку с exe своего приложения.
Врете товарисЧ. Если брать deb, то необходимо написать спеку по правильной сборке, собрать в chroot'e, иначе получишь тот же DLL hell, но под другим названием Dependency hell.
0
Слепой Уфолог
3 / 3 / 0
Регистрация: 04.09.2013
Сообщений: 18
15.09.2013, 22:03  [ТС] 6
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Врете товарисЧ. Если брать deb, то необходимо написать спеку по правильной сборке, собрать в chroot'e, иначе получишь тот же DLL hell, но под другим названием Dependency hell.
Сорри если у кого-то это вызвало баттхерт, но я не для этого спросил.
Никакие спеки и чруты мне не нужны чтобы в линуксе Qt екзешка запустилась при двойном щелчке, все что мне нужно сделать это набрать "sudo apt-get install qt5-defaults" и я даже понятия не имею какие файлы и куда были установлены (не говоря уже про спеки и чруты), и все работает, не надо ходить за грибами (DLL) по всей системе собирать то да сё и сбрасывать в кучу возле екзешки чтобы она не выдала рантайм еррор как в windows.

А DLL хеллы в дистрибутивах давно являются редкостью. И я не для срача против Linux или Windows писал, если у кого баттхерт просьба не писать, наверное (надеюсь) забанят.
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
15.09.2013, 22:34 7
Слепой Уфолог, кроч
ничего страшного нет, просто либо собираешь свое приложение с Qt libами статически, либо устанавливаешь Qt'ные dll'ки в папке со своим приложением
0
Dmitriy_M
1429 / 1309 / 131
Регистрация: 20.03.2009
Сообщений: 4,678
Записей в блоге: 11
15.09.2013, 23:48 8
Цитата Сообщение от Слепой Уфолог Посмотреть сообщение
Никакие спеки и чруты мне не нужны чтобы в линуксе Qt екзешка запустилась при двойном щелчке, все что мне нужно сделать это набрать "sudo apt-get install qt5-defaults" и я даже понятия не имею какие файлы и куда были установлены (не говоря уже про спеки и чруты), и все работает, не надо ходить за грибами (DLL) по всей системе собирать то да сё и сбрасывать в кучу возле екзешки чтобы она не выдала рантайм еррор как в windows.
1. Никто не бегает по системе и не ищет dll, если система сборки сумела собрать приложение, то она в курсе где находятся все эти dll.
Так же в современных дистрибутивах Qt представлен множеством отдельных либ, про которые так же надо знать, что бы суметь собрать пакет.
Для меня тут существенной разницы нет между GNU/Linux, Windows.
2. Насчет самой же развертки то пишется скрипт для интсаллера и создается интсалятор. Пользователь делает пару кликов и все автоматически ставиться.
0
Слепой Уфолог
3 / 3 / 0
Регистрация: 04.09.2013
Сообщений: 18
16.09.2013, 00:38  [ТС] 9
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
1. Никто не бегает по системе и не ищет dll, если система сборки сумела собрать приложение, то она в курсе где находятся все эти dll.
Так же в современных дистрибутивах Qt представлен множеством отдельных либ, про которые так же надо знать, что бы суметь собрать пакет.
Для меня тут существенной разницы нет между GNU/Linux, Windows.
Система сборки - QtCreator - да, а я не QtCreator, и мне не надо знать: на линуксе я не знаю где они находятся и все работает - я только должен сказать юзеру "прежде чем запустить прогу набери sudo apt-get install libgtkmm-3.0-dev", как уже мне сказали - windows не очень дружит с versioning и поэтому такие варианты неприемлемы.

Цитата Сообщение от Dmitriy_M Посмотреть сообщение
2. Насчет самой же развертки то пишется скрипт для интсаллера и создается интсалятор. Пользователь делает пару кликов и все автоматически ставиться.
Ну как я в первом посте написал, меня не столько инсталлятор интересует, сколько чтобы прога работала без лишних движений после компиляции, какого фига нужно ходить по грибам после компиляции екзешки за разными DLL я уже понял, и кажется понял техническую причину: в windows нет консенсуса как должны вести себя проги после апдейта DLLов (несмотря на то что есть VERSIONINFO), в линуксе почему-то не встречал этой проблемы, например после апдейта libgtkmm-3.0-dev с (внутренней версии) 3.8.0 до 3.8.1 моя прога продолжает работать нормально, видимо все что в пределах libgtkmm-3.0-dev несмотря на апдейты будет API/ABI compatible, наверное вся магия именно в этом. Я так привык к этому что то что в windows показалось дикостью, хотя уже несколько привык к этой практике.
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
16.09.2013, 01:17 10
Цитата Сообщение от Слепой Уфолог Посмотреть сообщение
в линуксе почему-то не встречал этой проблемы, например после апдейта libgtkmm-3.0-dev с (внутренней версии) 3.8.0 до 3.8.1 моя прога продолжает работать нормально, видимо все что в пределах libgtkmm-3.0-dev несмотря на апдейты будет API/ABI compatible, наверное вся магия именно в этом.
стоит не соблюсти строгие правила binary compatibility и сигфолты гарантированы
0
newbie666
16.09.2013, 10:31
  #11

Не по теме:

alex_x_x , это твоё фото на аватаре ? :D

0
Dmitriy_M
1429 / 1309 / 131
Регистрация: 20.03.2009
Сообщений: 4,678
Записей в блоге: 11
16.09.2013, 11:09 12
Цитата Сообщение от alex_x_x Посмотреть сообщение
стоит не соблюсти строгие правила binary compatibility и сигфолты гарантированы
Это точно, особенно если не используется pimpl.

Добавлено через 26 минут
Если кому то будет полезным, могу описать сборку дистрибутива при помощи CMake+Inno Setup
0
voral
868 / 574 / 123
Регистрация: 16.03.2008
Сообщений: 2,707
16.09.2013, 17:55 13
Цитата Сообщение от Слепой Уфолог Посмотреть сообщение
Система сборки - QtCreator - да, а я не QtCreator, и мне не надо знать: на линуксе я не знаю где они находятся и все работает - я только должен сказать юзеру "прежде чем запустить прогу набери sudo apt-get install libgtkmm-3.0-dev", как уже мне сказали - windows не очень дружит с versioning и поэтому такие варианты неприемлемы.
Какая-то у вас путаница в голове. имхо.
Сравнивать надо одинаковые телодвижение:
Копируем на целевой компьютер только бинарник: в не зависимости от ОС запустится он или нет зависит только от того доступны ли либы в системе. Вероятность наличия Qt либ в линуксах выше. Но не 100%ый факт. Т.е. если у вас либы лежат не в "системном" каталоге. вам придется и на линуксе их искать. Как пример в системе могут различаться версии того же Qt. У меня в системе 4.8. (64 бита) то так ж установлены 4.8 32бита и 5.х. ради бинарника скомпилированного для Qt5 мне так же (в общем случае) придется постараться.

Команда же aptitude install bla-bla не является аналогом запуска "exe-шника приложения". это аналог запуска инсталлятора. И тут все зависит от разаработчка. Он может собрать deb пакет и не указать зависимости. Тогда так же у вас ни чего не запустится (если не установлены нужные Qt либы), Так же и с созданием и виндус инсталятора и dmg для макоси.

Если не статика, то об комплектности должен позаботится создатель инсталятора/пакета. В случае с линукс принято использовать системные либы. Именно по этому не надо тащить в пакет их копии -достаточно указать зависимость.

Но! есть и исключение. Напрмиер, ваше приложение завязано на Qt5 и выше. Но вы его хотите предоставить для пользователе, например, Debian Stable. И вам придется все либы которые используются и разняться с системными добавить в пакет. К тому же предусмотреть скрипт запускающий ваш бинарник в котором указывается, что либы надо искать не в системном каталоге, а в том куда вы их установили

Добавлено через 1 минуту
Цитата Сообщение от Слепой Уфолог Посмотреть сообщение
Ну как я в первом посте написал, меня не столько инсталлятор интересует, сколько чтобы прога работала без лишних движений после компиляции,
Будьте осторожны с этим мнением - не факт, что на целевой системе нужная версия Qt.

Добавлено через 6 минут

Не по теме:


Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Если кому то будет полезным, могу описать сборку дистрибутива при помощи CMake+Inno Setup
Кстати, я тут опробовал Qt Installer Framework, для сборки инсталятора под винду (он, коенчно, может и под остальные, но мне кажется лучше нативные способы распространения) - вполне годное решение, только документация слабовата приходится метод "научного тыка" применять порой

0
16.09.2013, 17:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 17:55

Кросс-компиляция из Windows для Linux, MacOS
Доброго времени суток! Имеется проект написанный на C++ в Qt, скомпилирован...

Запуск приложений в astra linux
Разрабатываю приложение на ubuntu в qt. Почему оно не запускается в astra linux?

Проблемы открытием приложений на Linux
Делал линковку по этой схеме. Использовал MinGW. во флагах у configure.exe...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru