C++ 与Qt项目的静态链接

C++ 与Qt项目的静态链接,c++,visual-studio,visual-studio-2010,qt,static-libraries,C++,Visual Studio,Visual Studio 2010,Qt,Static Libraries,我在VisualStudio2010 Professional中构建了一个Qt项目。然而,当我运行它(在调试或发布模式下)时,它会要求一些qtdll。如果我提供dll并将它们放入System32中,它会起作用,但我的问题是,如何使所有库都包含在.exe中?我有我需要的所有静态库,我只是不知道如何制作,这样应用程序就不会向最终用户索要它们。正确的方法是创建一个安装程序,将Qt库与应用程序一起安装。VisualStudio附带了一个安装项目模板,您可以使用该模板轻松创建自己的自定义安装程序。静态链接

我在VisualStudio2010 Professional中构建了一个Qt项目。然而,当我运行它(在调试或发布模式下)时,它会要求一些qtdll。如果我提供dll并将它们放入System32中,它会起作用,但我的问题是,如何使所有库都包含在.exe中?我有我需要的所有静态库,我只是不知道如何制作,这样应用程序就不会向最终用户索要它们。

正确的方法是创建一个安装程序,将Qt库与应用程序一起安装。VisualStudio附带了一个安装项目模板,您可以使用该模板轻松创建自己的自定义安装程序。静态链接很少是一个好的选择,原因很多

但是,如果坚持静态链接,则需要使用
-static
标志重新编译Qt源。
Qt 4提供了一个演练


如果您使用的是LGPL版本的Qt,请确保您已经阅读了有关部署的所有法律问题的答案,并适当地解决了这些问题。

我确实想知道,我该如何配置这些问题,以便只有少数库可以静态链接,其余的库(将来可能需要更新/修复的库)可以静态链接会动态链接吗?@user:我很确定这是不可能的。你要么把所有的Qt库都带上,要么不带。您可以静态链接Qt库,但不能链接Microsoft的C/C++运行库(反之亦然)。但我不知道你为什么要这么做。如果您的目标是消除所有依赖项并提供单个EXE,那么静态链接是您唯一的选择。如果您愿意拥有一些依赖项,那么您真的应该构建一个安装程序并将其作为单个EXE提供。这对用户来说是一个额外的步骤,但它确实减少了头痛!有点离题,但我想知道为什么静态链接不是一个好的选择?我在谷歌上找不到太多关于这方面的信息,我想知道,这样我就可以说服我的客户忘记静态链接(这对Qt来说总是一场噩梦)。@Laurent:Hrmm,我可以想到几个缺点,但很少(如果有的话)能说服客户。理想情况下,这种关系足够好,他们相信你作为开发人员的判断,并同意你的建议。除此之外,我可以想出两种不同的选择。首先是用一个论点来吓唬他们,即静态链接会阻止他们在为运行库libs发布安全更新时获得安全更新。当应用程序静态链接时,您必须发布一个全新版本,并将其部署到所有客户端计算机上,以便利用对库的最新版本所做的任何安全改进。而新版本的运行库要小得多,可以独立部署,并且通常由Windows Update推送(当然,Qt不是这样)。第二个途径(这是我最喜欢的)是向他们展示创建安装程序是多么容易。Inno安装是我个人最喜欢的解决方案,但是VS也有这个内置的解决方案。您可以创建一个相当于单个EXE的安装程序,就像单个EXE应用程序一样易于部署。用户只需单击“安装”。