C++ 两个独立的Qt应用程序可以使用相同的DLL文件吗?

C++ 两个独立的Qt应用程序可以使用相同的DLL文件吗?,c++,visual-studio,qt,dll,qt5,C++,Visual Studio,Qt,Dll,Qt5,我有一个难题要解决。我有两个基于Qt的应用程序,第一个在主文件夹中,第二个在它的子目录中(是的,我被迫这样做)。我面临的问题是,我必须为每个应用程序提供5个完全相同的DLL文件。如果它们不那么重(10个DLL文件=60~MB),我就不会有这个问题。这绝对是太多了 在调试版本中,我可以在Visual Studio设置中设置路径变量,但在生产机器上无法这样做 我有没有办法将其中一个应用程序设置为依赖子目录中的DLL文件?我不知道您使用的是哪种安装程序,但DLL应该只在存档中存储一次,并且在安装时应将

我有一个难题要解决。我有两个基于Qt的应用程序,第一个在主文件夹中,第二个在它的子目录中(是的,我被迫这样做)。我面临的问题是,我必须为每个应用程序提供5个完全相同的DLL文件。如果它们不那么重(10个DLL文件=60~MB),我就不会有这个问题。这绝对是太多了

在调试版本中,我可以在Visual Studio设置中设置
路径
变量,但在生产机器上无法这样做


我有没有办法将其中一个应用程序设置为依赖子目录中的DLL文件?

我不知道您使用的是哪种安装程序,但DLL应该只在存档中存储一次,并且在安装时应将这些文件硬链接。所以这不是问题,除非你的安装程序坏了或者安装脚本坏了

在基于PC的现代系统上,60MB并不多。如果要减小安装文件或归档文件的大小,请仅保留一份DLL文件副本,并让安装程序将其复制到目的地。
AddDllDirectory
SetDllDirectory
、和
SetDefaultDllDirectories
修改调用进程的搜索路径。在导入任何DLL之前,您必须使用它们。本质上,您必须使用延迟加载。只有在动态加载相应的库(而不是在任何应用程序代码运行之前静态解析)的情况下,这才有效。在用户定义的助手函数中使用延迟加载是一种性能较差的方法。@peppe:只有当您可以将目录添加到
PATH
环境变量中时,这种方法才有效。环境变量和整个环境都有相当低的限制,您很可能会遇到它们。既然你为“Qt专家”工作,你就已经知道问题的答案了:让Qt变得不那么糟糕。@peppe:
1
Ad homeem?你经常感到被猎杀吗<代码>2我相信在你提问之前我已经回答了这个问题:环境的大小是有限的。再加上它可能会失败
3
MyFancyLibrary.dll使问题变得不同,因为MyFancyLibrary.dll可以延迟加载。@Kevinkramer:我概述了上述过程,但Qt似乎没有为此做好准备。安装程序可以将DLL放入的标准位置是应用程序目录。OP不希望他们的某个应用程序出现这种情况。我根本不使用任何安装向导。只有RAR文件归档程序。@Rusco这是您的问题,那么:您需要硬链接源文件,并使用支持这些硬链接的归档程序。这不是解决方案。这根本不能解决我的问题。我仍然会复制10个DLL来维护我的应用程序。你知道硬链接占用“零”空间,无论是在“安装”后的存档中还是磁盘上,对吗?你能更具体地说明我如何添加这样的硬链接吗?我正在使用
innoscript
installer。