我正在使用VS2008开发一个COM dll,它默认使用CRT版本9 但我使用的TSF(文本服务框架)与新的CRT不兼容。我认为解决方案是使用兼容的解决方案,那么如何指定CRT版本呢?
我正在使用VS2008开发一个COM dll,它默认使用CRT版本9 但我使用的TSF(文本服务框架)与新的CRT不兼容。我认为解决方案是使用兼容的解决方案,那么如何指定CRT版本呢?
我衷心地加入了这个建议 不 手动更改链接的CRT版本。但是,如果由于某种原因(我无法想象)这对你来说是正确的行动方式,那么这样做的方法是改变 表现 为您的项目。
首先确保清单是 不 在每个构建上生成(在VS2005上:配置属性/链接器/清单文件/生成清单),因为它会覆盖您的手动更改。还要确保启用了隔离。 接下来,找到清单文件 - 应该在$(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 \ WinSxS文件夹中的文件以查看可用的版本。检查 这里 一旦找到所需的版本,如何解压缩publicKeyToken。 (虽然我首先尝试直接查看其他项目的清单,并链接到您想要的CRT版本)。
如果你去那里,期待一些粗糙的水。如果您的应用程序是一个不与其他并排组件(MFC,OpenMP等)链接的控制台应用程序,那么您可能会有一些运气。如果您的应用程序非常重要,那么如果SxS组件没有复杂的版本依赖性,我会感到惊讶。
(编辑)您还需要在应用程序中分发您正在使用的特定CRT。这里的 有人 谁做的。
最简单的方法是使用VC ++版本构建DLL,该版本使用与TFS兼容的CRT。
我认为将DLL与不同版本的CRT链接起来并不是一个好主意,除非您也使用相同版本的头文件。最简单的方法是使用正确的VC ++版本......
如果您还想尝试,可以:
您还可以尝试更改“工具 - >选项 - >项目和解决方案 - > VC ++目录 - >库文件”中的默认目录。也许将$(VCInstallDir)lib改为你其他版本的CRT所在的路径就可以了
不要尝试使用VS9并链接到另一个版本的CRT。
如果你需要你的应用程序链接到另一个CRT,比如VS8的CRT,那么你必须在该版本的VS中编译和链接你的应用程序。
该解决方案适用于我使用Visual Studio Express 2013 x64 + OpenCV 2.4.9 x64编译,调试(我在LV2013 x64中集成),但它应该适用于任何其他VS版本:
1)右键单击解决方案>属性>调试源文件...
2)可能有两个entires(取决于你的VS-install-directory)...... C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ atlmfc C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ crt
有了这些,它可以用于Visual Studio 2013 Express,但也适用于其他2013.如果你有Visual Studio 10或11只需键入“Microsoft Visual Studio 11.0”或每个10.0。您也可以添加它们。
您可以从解决方案>属性>调试源文件(如上所述)下的OpenCV.sln获取这些条目。正如已经描述的那样:CRT需要匹配...而这发生在那个地方。