C++, Qt - 如何消除dll依赖?

5
我已经编译了我的Qt应用程序,现在有一个问题 - 我的项目需要在与 .exe 文件相同的文件夹中放置 QtCore4.dllQtGui4.dll(我使用带有Qt插件的MSVS2008构建了我的项目)

问题:

是否有任何方法将这些 .dll 文件与我的最终应用程序合并,使它们成为一个大的 .exe 文件?(我不想在发布应用程序时再添加一堆dll文件)

谢谢。


1
请注意,如果您这样做,您的exe文件将会变得非常庞大。 - zildjohn01
它不会比当前的exe和dll组合更大,可能会更小。 - galinette
3个回答

9

2
请注意,静态链接LGPL版本的Qt是一个灰色地带(不要忘记您需要先构建Qt的静态版本)。 - Rob
3
这件事情并不含糊:静态链接一个LGPL库会要求你公开发布你的源代码。 - Lucas
1
Jerry,请将你的链接编辑为使用/latest/而不是/4.2/。Qt 4.2现在已经过时了许多年。 - Lucas
6
@Lucas:静态链接到一个LGPL库不会强制你发布源代码。它要求你发布(已编译的)目标文件,以便它们可以与更新版本的该LGPL库进行重新链接 - Ken Bloom
我希望这些链接仍然有效。不过这并不是杰里的错。 - ExpatEgghead
显示剩余2条评论

2

将它们打包成一个自解压的 .exe 文件 (例如使用 7zip),该文件将所有文件提取到临时目录,运行程序,然后在程序退出后删除这些文件。

这比以前建议的静态链接 Qt 更容易、更节省时间,而且不会受到法律限制。


0

当然,你可以静态链接某些方式。但使用 DLL 的重点应该是使程序更小(如果其他应用程序正在使用 Qt 库,则在磁盘和内存中)...这些 DLL 应该是系统范围的,以便需要它们的其他应用程序可以使用它们。基本上,你必须告诉想要你的程序工作的人安装 Qt 框架。

另一种部署方式在 这里 解释,阅读与静态链接相关的部分。


1
考虑到当前硬盘价格以及由于冲突的DLL版本可能(并且确实)会引起的困难,这并不是一个好主意。 - Jerry Coffin
哎呀,这个链接和 Coffin 给的一样,但是从介绍里选择你的系统(Windows)会带你到已经给出的 v4.2 链接。 - ShinTakezou
@Coffin,多么奇怪的世界啊;对我来说,这几乎就像是说一个程序应该随着整个适用于运行它的操作系统一起发货...(这也是为什么在某些情况下使用“第三方”非轻量级框架不是我的首选)。当然,上下文决定了在提问者的情况下哪个更好(如果是为了工作,静态链接的解决方案可能更好,但我不会称之为进步)。 - ShinTakezou
1
@ShinTakezou,我猜你从未尝试在Windows上部署使用Visual Studio C++构建的应用程序。C++运行时不会自动安装在系统中,必须通过静态链接或通过安装程序进行分发。 - Harald Scheirich
无休止地复制代码......;我很高兴最终不必为Windows部署应用程序,即使发生这种情况,我也会对“完全静态”的解决方案感到不满。它看起来像史前时代的东西。 - ShinTakezou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接