首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Qt让开发人员为每个应用程序包括他们的dll?

为什么Qt让开发人员为每个应用程序包括他们的dll?
EN

Stack Overflow用户
提问于 2020-03-09 07:12:32
回答 1查看 113关注 0票数 1

我注意到部署在windows应用程序上的总是包括它们需要的dll。他们为什么要那样做?为什么他们不能像在linux上那样做呢?--您将所需的Qt版本安装到系统,然后每个需要它的应用程序都可以使用它,例如,只有一个库实例(不包括Qt 4/qt5这样的不同版本)。

如果您安装Java/..Net,然后只使用一个库实例(Dll)来运行/开发应用程序,那不是更好吗?

我觉得这有点“不保守”:我有7个应用程序使用Qt5,所有应用程序都有Qt5Core.dllQt5GUI.dll等,每个应用程序都占用一些空间。感觉我有7包Qt5库..。x_x

而在linux上,这些应用程序只使用“一个”Qt库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-09 08:06:42

我注意到部署在windows应用程序上的总是包括它们需要的dll。

这被称为“本地部署”。

他们为什么要那样做?

我可以想出几个理由。

  1. 以避免DLL地狱
  2. 它得到了微软的认可。他们写道:“您可以使用此部署方法来启用不具有管理员权限的用户的安装,或者对可以从网络共享运行的应用程序进行安装。”(见https://learn.microsoft.com/en-us/cpp/windows/choosing-a-deployment-method?view=vs-2019)

您将所需的Qt版本安装到系统中,然后每个需要它的应用程序都可以使用它,例如,只有一个库实例(不包括Qt 4/Qt 5这样的不同版本)。

Qt是一个C++库。C++ DLL的差异可以不仅仅是一个主要版本号。DLL可以用MinGW构建,也可以用MSVC构建;可以是32位,也可以是64位。不同的变体互不相容。

示例:如果您强制一台PC拥有Qt5.14.1 MSVC 32位的全局副本,并将其放在您的路径中,那么:

  • 用MinGW构建的PC上的其他Qt应用程序无法运行。
  • 电脑上其他64位的Qt应用程序无法运行。
  • 必须使用QT5.13的应用程序可能会被破坏。(例如,如果Qt 5.14中存在严重错误)

为什么他们不能像在linux上那样做呢..。在linux上,同样的应用程序只使用“一个”Qt库。

我在上面列出了这种方法的一些缺点。此外,Linux发行版中的Qt版本通常落后几个版本,因此发行版存储库中的应用程序不能使用最新的特性、补丁或改进。

这就是为什么像AppImage与Snapcraft这样的系统被发明的原因之一。有时,Linux用户也希望应用程序包含其库的副本,而不是拥有库的一个全局副本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60596053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档