代码之家  ›  专栏  ›  技术社区  ›  Dimitri C.

如何选择应用程序编译的Visual C++库的版本?

  •  3
  • Dimitri C.  · 技术社区  · 16 年前

    我使用Visual Studio 2008作为C++。编译时,visualstudio根据VC 9.0库的头文件进行编译。但是,此库有不同的版本:

    • v9.0.21022.8(=RTM)
    • v9.0.30729.4148(=带有安全更新的SP1)

    我想知道是否可以告诉visualstudio应该针对哪个版本进行编译。

    我认为这很重要的原因是因为应用程序的安装程序需要确保微软Visual C++ 2008可重分发包的正确版本已经安装。对我来说,我觉得我无法控制这种依赖关系,就像某些Windows更新一样( Visual Studio更新)可以更改此依赖项。我希望继续使用相同的版本,以避免安装程序升级可再发行包的开销。

    注意 earlier question ,因为那是关于链接时间的。我也不是在寻找一种方法来控制嵌入清单文件中的版本,正如前面所解释的那样 here .

    4 回复  |  直到 9 年前
        1
  •  2
  •   Hans Passant    16 年前

    包含在二进制文件中的清单是由VS构建系统自动生成的。确定发送到清单中的版本依赖关系的重要头文件是vc\include\crtassem.h和crtdefs.h。前者声明CRT版本。请注意,它已经支持RTM版本与“最新”版本,并使用了“绑定到当前”宏的“最新”版本。后者包含#pragma comment指令,用于将/manifestdependency链接器选项嵌入到.obj文件中,从而使链接器自动生成清单。

    您不必这样做,您可以简单地关闭生成清单的链接器选项并编写自己的选项。这样你就可以完全控制应用程序绑定到的CRT版本。你是否在这方面有点值得怀疑。你可能仍然在运送去年7月更新的旧版本的CRT,它包含了一个严重的安全漏洞。客户往往对在他们的机器上安装有良好文档记录并解决了安全漏洞的软件感到有点不高兴。


    接下来你要做的就是控制DLL的部署。您必须自己将dll部署到WinSxS并行缓存中。

        2
  •  1
  •   rerun    16 年前

    这只是一个问题,您的配置设置在哪个目录下构建。只要你的机器上有头的所有版本和它们链接到的库,我不明白为什么这不能成为每个版本的新配置。

        3
  •  1
  •   Steve314    16 年前

    正常情况下,这应该不会有问题-补丁毕竟是错误修复和安全更新。原则上,每一次改变都会让你的应用程序更加稳定。不一定都是真的,但无论如何你也无能为力。

    有一些选项可以更改运行时,但它们与线程安全和类似问题有关。在项目财产中有一些相关的地方。特别是,在C/C++ +代码生成选项卡中,您可以选择要使用的运行库。

    如果你真的很担心 可以 选择静态链接的非DLL运行时。用户仍然可以更新他们的运行时动态链接库,但这不会提高应用程序的稳定性。

        4
  •  0
  •   Matt Joiner    16 年前

    您可以使用清单资源文件来实现这一点,这些文件是用XML编写的。

    我们不得不在以前的工作地点做这件事,不幸的是(或者,更幸运的是),我没有接触到详细的细节。 This article

    更新0

    以下是关于 manifest file generation ,以及它们在 isolating applications and building side by side assemblies