有什么原因不能静态链接到VC CRT?

我发现即使使用SxS进行动态链接,Windows Update也会出现并踩到VC8 CRT的某个版本(例如它存在安全漏洞),然后我的应用将无法使用旧版本运行。有什么原因不能静态链接到VC CRT?

除了增加二进制文件的大小外,还有哪些重要原因可以保持与VC CRT的动态链接?

回答:

  1. 保持最新的安全修复程序是一个很好的理由。否则,您需要负责使用固定CRT重建您的应用程序并将其部署到您的客户。

    • 使用共享CRT应该会导致系统的内存占用量更低,因为大多数DLL的页面可以在进程之间共享。

回答:

当您的程序正在使用来自您提到的“安全漏洞”之一的CRT中的某些内容时。如果您静态链接,您的用户将不知道他们受到安全漏洞的威胁,并且可能存在病毒危险。另一方面,如果你的程序因为动态链接而不工作,它们将被迫更新为新的安全版本。

回答:

见http://people.redhat.com/drepper/no_static_linking.html

这是关于Linux,但一些想法适用。

回答:

你在Windows中很幸运。而Linux的字面意思是由库的组成,并且你们都有这些问题。 :-)

据我所知,库供应商总是保持向后兼容性,特别是如果它是微软。因此,可能的解决方案是在旧机器上构建应用程序,同时牢记微软开发CRT库的方式可以让您的应用程序在所有更高版本上运行。

回答:

我更喜欢静态链接。安全并不是一个真正的大问题,因为黑客瞄准了许多用户在他们的系统上安装的应用程序。所以除非你的应用程序拥有超过100万用户,否则我不会担心它被黑客利用。

我不喜欢动态链接。它对我来说太脆弱了。

编辑:如果你想确保你的用户有你的应用程序的最新版本,那么也写一个更新应用程序,随着你的主应用程序自动安装。在Windows上,这可以作为服务来实现。

回答:

如果完成正确的应该有绝对没有动态链接的问题,应用程序不应该失败运行。唯一困难的部分是切换到从现在使用的任何方法构建安装程序到Microsoft支持的方式(可重新分发的合并模块 - MSM,MSI,动态链接)。请参阅this link从源头获得非常宝贵的建议。从博客的有趣引言:

  • 为了重新分配的Visual C++库,你需要做的是包括适当的.msm文件和与之配套的政策的.msm分发您所需要的库中的所有 。
  • 再次,只是强调 - 除非你使用点击一次部署应用程序不使用VCRedist * .EXE。
  • 不过,我能想到的没有场景在此(我注:静态链接)实际上是运送你的产品给客户的时候做正确的事情。

我不同意,你可能需要做不平凡的工作,以实现这个(也许您不使用MSI现在等),但我认为,如果条件允许,你应该尝试切换到上述推荐的方法。

如果你不这样做,你的应用程序将停止的确在某些时候工作上面描述的方式。开发人员指责微软,但他们并没有遵循上述支持的方式。也许微软应该责怪它,因为它并没有链接到MSDN上更多的博客上来传播这个词,但这就是它。

以上是 有什么原因不能静态链接到VC CRT? 的全部内容, 来源链接: utcz.com/qa/259203.html

回到顶部