代码之家  ›  专栏  ›  技术社区  ›  Ahmed

如何强制C++编译器使用特定的CRT版本?

  •  11
  • Ahmed  · 技术社区  · 16 年前

    我正在使用VS2008开发一个默认使用CRT版本9的COM DLL 但是我使用的TSF(文本服务框架)与新的CRT不兼容。我认为解决方案是使用兼容的版本,那么如何指定CRT版本呢?

    4 回复  |  直到 10 年前
        1
  •  10
  •   Ofek Shilon    16 年前

    我全心全意地参加了推荐活动 手动更改所链接的CRT版本。但是,如果出于某种原因(我无法想象),这对你来说是正确的行动方针,那么改变 manifest 为你的项目。

    首先确保清单 在每个生成上生成(在VS2005上:配置属性/linker/manifest文件/generate manifest),因为它将覆盖您的手动更改。同时确保已启用隔离。 接下来,找到清单文件-应该在$(intdir)处(例如,debug)。您应该看到一个类似于-

      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
    

    (当然,对于调试版本)。您需要编辑crt元素的version和publickeytoken属性。 您可以检查本地windows\winxs文件夹中的文件,以查看可用的版本。检查 here 如何在找到所需版本后提取PublicKeyToken。(尽管我首先尝试直接查看其他项目的清单,链接到您想要的CRT版本)。

    如果你真的去了那里,就等着喝些粗暴的水吧。如果您的应用程序是一个控制台应用程序,不与其他并行组件(MFC、OpenMP等)链接,那么您可能会有一些运气。如果您的应用程序非常重要,那么如果在SXS组件中没有复杂的版本依赖关系,我会感到惊讶。

    (编辑)您还需要将您使用的特定CRT与应用程序一起分发。这里是 someone 是谁干的

        2
  •  2
  •   Dani van der Meer    16 年前

    最简单的方法是用一个使用与TFS兼容的CRT的VC++版本构建DLL。

    我不认为将DLL链接到不同版本的CRT是个好主意,除非您也使用相同版本的头文件。最简单的方法是使用正确的VC++版本…

    如果您仍想尝试,可以:

    • 转到“配置设置->链接器->输入->忽略特定库”,然后输入正在使用的CRT(libc.lib、libcmt.lib等)。请参见 code project article 详情请参阅。
    • 在“配置设置->链接器->输入->其他依赖项”中输入要使用的CRT版本的名称,并在“配置设置->链接器->常规->其他库目录”中输入其路径。

    您还可以尝试在“工具->选项->项目和解决方案->VC++目录->库文件”中更改默认目录。也许将$(vcinstalldir)lib更改为CRT的其他版本所驻留的路径就可以了。

        3
  •  0
  •   John Dibling    16 年前

    不要试图使用VS9并链接到CRT的另一个版本。

    如果您需要您的应用程序链接到另一个CRT,例如VS8的CRT,那么您必须编译并链接该版本的VS中的应用程序。

        4
  •  0
  •   Rob    10 年前

    该解决方案适用于我的Visual Studio Express 2013 x64+OpenCv 2.4.9 x64编译、调试(我在LV2013 x64中集成了该解决方案),但它适用于任何其他VS版本:

    1)右键单击解决方案>属性>调试源文件…

    2)可能有两个实体(取决于您的vs安装目录)。 C:\程序文件(x86)\Microsoft Visual Studio 12.0\Common7\IDE\VC7\ATLMFC C:\程序文件(x86)\Microsoft Visual Studio 12.0\Common7\IDE\VC7\CRT

    有了这些,它将适用于Visual Studio 2013学习版,但也适用于其他2013版。如果您有Visual Studio 10或11,只需分别键入“Microsoft Visual Studio 11.0”或10.0即可。您也可以添加它们。

    这些条目可以从解决方案>属性>调试源文件(如上所述)下的opencv.sln中获得。如前所述:CRT需要匹配…而这发生在那个地方。