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

有帮助吗?

解决方案

我整个尽情参加推荐的不可以手动更改您对链接的CRT的版本。但是,如果由于某种原因(我无法想象),这是你正确的行动当然,这样做的方式是改变的为您的项目清单

首先确保清单是的的每个构建生成(在VS2005:配置属性/链接器/清单文件/生成清单),因为它会覆盖您手动更改。另外,还要确保有没有隔离功能。 接下来,找到清单文件 - 应该在$(IntDir)(例如,调试)。你应该看到一个部分类似 -

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

(对于调试生成的,当然)。您需要编辑的版本和CRT元素的公钥属性。 你可以在当地的WINDOWS \ WinSxS文件夹检查文件,查看版本。检查 的如何提取公钥一旦你找到你想要的版本。 (虽然我第一次尝试,并直视其他项目的清单,链接对你的期望CRT版本)。

如果你去那里,指望一些粗糙的水。你可能有一些运气,如果你的应用程序是一个控制台应用程序,不针对其他并排端组件(MFC,OpenMP的,等等)联系起来。如果你的应用是不平凡的,如果没有一些复杂的版本依赖的入账金额的SxS组件我会感到惊讶。

(编辑)你想也需要随应用程序分发您所使用的特定CRT。这里是 的人谁做。

其他提示

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

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

如果您仍想尝试,您可以:

  • 转到“配置设置->链接器->输入->忽略特定库”并输入您正在使用的crt(libc.lib、libcmt.lib等)看到这个 代码项目文章 了解详情)。
  • 在“配置设置->链接器->输入->附加依赖项”中输入要使用的crt版本的名称,在“配置设置->链接器->常规->附加库目录”中输入其路径。

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

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

如果您需要在您的应用程序链接到另一个CRT,说VS8的CRT,那么你就必须编译与在该版本VS的链接您的应用程序。

在解决方案为我用Visual Studio Express的2013的x64 + OpenCV的2.4.9编译64位,调试(我集成在LV2013 64),但它应该对任何其他VS版本工作:

1)对您的解决方案右键单击>属性>调试源文件...

2)有也许两个entires(取决于您的VS-安装目录)... C:\ Program Files文件(x86)的\微软的Visual Studio 12.0 \ Common7 \ IDE \ VC7 \ atlmfc C:\程序文件(x86)\微软的Visual Studio 12.0 \ Common7 \ IDE \ VC7 \ CRT

使用这些它会工作的Visual Studio 2013快,但也应该对其他工作,2013年如果你已经有了Visual Studio的10或11只需输入“微软的Visual Studio 11.0”或在每个10.0。你也可以加入他们。

这些项下的解决方案,你可以从你的OpenCV.sln获取>属性>调试源文件(如上所述)。正如已经描述下:CRT需要匹配...这发生在那个地方

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top