Почему Qt заставляет разработчиков включать свои dll для каждого приложения? - PullRequest
0 голосов
/ 09 марта 2020

Я заметил, что развернутые на windows приложениях Qt всегда включают необходимые им библиотеки. Почему они сделали это так? Почему они не могут сделать это как на linux? - Вы устанавливаете нужную версию Qt в систему, а затем все приложения, которые в ней нуждаются - могут использовать ее, например, только один экземпляр библиотеки (исключая разные версии, такие как qt4 / qt5).

Не лучше ли было бы сделайте это как Java /.Net, например, вы устанавливаете Java /.Net, затем запускаете / разрабатываете приложения, используя только один экземпляр библиотек (dll).

Я нахожу это несколько «несохраняющим»: I есть 7 приложений, использующих Qt5, и у всех них есть Qt5Core.dll, Qt5GUI.dll, et c. и каждый из них занимает немного места. Кажется, у меня есть 7 пакетов библиотек Qt5 ... x_x

В то время как на linux эти же приложения используют только "одну" библиотеку Qt.

1 Ответ

2 голосов
/ 09 марта 2020

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

Это называется "локальное развертывание".

Почему они так сделали?

Я могу подумать о нескольких причинах.

  1. Чтобы избежать DLL Hell .
  2. Это санкционировано Microsoft. Они написали, «Этот метод развертывания можно использовать для включения установки пользователями, не имеющими прав администратора, или для приложений, которые можно запускать из общего сетевого ресурса». (см. https://docs.microsoft.com/en-us/cpp/windows/choosing-a-deployment-method?view=vs-2019 )

Вы устанавливаете нужную версию Qt в систему, а затем все приложения, которые в ней нуждаются, могут ее использовать, например, только один экземпляр библиотеки (исключая разные версии, такие как qt4 / qt5). )

Qt - это библиотека C ++. Библиотеки C ++ могут отличаться не только от номера основной версии. Библиотеки DLL могут быть собраны с помощью MinGW или MSVC; Они могут быть 32-разрядными или 64-разрядными. Различные варианты несовместимы друг с другом.

Пример: если вы заставляете P C иметь одну глобальную копию Qt 5.14.1 MSV C 32-bit и помещаете ее в вашу переменную PATH, тогда :

  • Другие приложения Qt на этом P C, созданные с помощью MinGW, не могут быть запущены.
  • Другие приложения Qt на этом P C, которые являются 64-битными, не могут быть запущены.
  • Приложения, которые должны использовать Qt 5.13, могут быть повреждены. (Например, если в Qt 5.14 существует критическая ошибка)

Почему они не могут сделать это, как на linux? .... в linux эти же приложения используют только "одну" библиотеку Qt.

Я перечислил несколько недостатков этого подхода выше. Кроме того, версия Qt в дистрибутивах Linux обычно отстает от нескольких версий, поэтому приложения в репозитории дистрибутивов не могут использовать последние функции, исправления или улучшения.

Это одна из причин, почему такие системы, как AppImage и Snapcraft были изобретены. Иногда Linux пользователи также хотят, чтобы приложение содержало копию своих библиотек вместо единой глобальной копии библиотек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...