首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求解多重CRT问题

求解多重CRT问题
EN

Stack Overflow用户
提问于 2010-03-08 16:44:59
回答 3查看 2.2K关注 0票数 3

我知道有一些类似的问题,但我不认为他们真的有相同的要求与我的。

我们的DLL是用Visual 2005编译的,由于安装限制,必须使用特定版本的链接。这是绝对的,用最新版本重新编译它不是一个解决方案。

我们最近更新了我们的Boost库。然而,当我构建Boost时,它会自动使用最新的CRT。现在,当我将Boost链接到我们的程序时,它会创建一个依赖于CRT的最新(错误)版本和旧(正确)版本的CRT。对最新版本的依赖需要消除。

解决这个问题的最好办法是什么?目前,我能想到的最好的方法是使用旧版本重新构建Boost,但是我不知道如何在不修改源代码的情况下轻松地完成这个任务。

如果有一种方法可以强制Visual在全球范围内使用特定版本的CRT (而不是在每个项目的基础上),那就太好了。或者简单地删除最新版本的CRT,但我很确定这是不可能的,因为我认为它是操作系统的一部分。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-09 15:41:32

解决方案是手动修改嵌入式清单以消除对最新CRT的依赖,因为它是用CRT动态链接构建的。不过,我怀疑这件事的安全性。

出于某种原因,在Boost构建过程中强制包含target to文件并不会强制它针对指定的CRT。

票数 3
EN

Stack Overflow用户

发布于 2010-03-08 17:00:31

AFAIK,不建议使用不同版本的CRT。与.NET不同,您可以从.NET 2.0 dll引用.NET 1.1DLL,非托管不提供这种灵活性。

由于您不能升级您的dll以使用更新的CRT,所以您唯一能做的就是在VS2005中重新构建Boost。

此外,不建议将不同CRT的两个dlls连接起来。它可能导致诸如内存损坏之类的问题。

注意:每个Visual都有其默认的CRT版本,所有all都引用该版本。

我也不明白“移除新的CRT”。您将需要为所使用的每个Visual版本安装。(该redist包含CRT ) http://msdn.microsoft.com/en-us/library/abx4dbyh%28VS.80%29.aspx

票数 5
EN

Stack Overflow用户

发布于 2010-03-09 15:48:55

您必须找到boost项目中的确切构造,注入错误CRT的依赖项,并删除/修改该构造。它可能是.vcproj文件中的东西,或者是清单之类的东西。

VC++ 2005和VC++ 2008 CRT包含多少相同的原语--您可能完全可以用VC++ 2005重新编译boost,或者稍微修改它,然后再重新编译。是的,这需要付出一定的努力,但这是唯一的方法--您的代码和boost代码都必须根据您想要使用的CRT版本编译。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2402939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档