我知道有一些类似的问题,但我不认为他们真的有相同的要求与我的。
我们的DLL是用Visual 2005编译的,由于安装限制,必须使用特定版本的链接。这是绝对的,用最新版本重新编译它不是一个解决方案。
我们最近更新了我们的Boost库。然而,当我构建Boost时,它会自动使用最新的CRT。现在,当我将Boost链接到我们的程序时,它会创建一个依赖于CRT的最新(错误)版本和旧(正确)版本的CRT。对最新版本的依赖需要消除。
解决这个问题的最好办法是什么?目前,我能想到的最好的方法是使用旧版本重新构建Boost,但是我不知道如何在不修改源代码的情况下轻松地完成这个任务。
如果有一种方法可以强制Visual在全球范围内使用特定版本的CRT (而不是在每个项目的基础上),那就太好了。或者简单地删除最新版本的CRT,但我很确定这是不可能的,因为我认为它是操作系统的一部分。
发布于 2010-03-09 15:41:32
解决方案是手动修改嵌入式清单以消除对最新CRT的依赖,因为它是用CRT动态链接构建的。不过,我怀疑这件事的安全性。
出于某种原因,在Boost构建过程中强制包含target to文件并不会强制它针对指定的CRT。
发布于 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
发布于 2010-03-09 15:48:55
您必须找到boost项目中的确切构造,注入错误CRT的依赖项,并删除/修改该构造。它可能是.vcproj文件中的东西,或者是清单之类的东西。
VC++ 2005和VC++ 2008 CRT包含多少相同的原语--您可能完全可以用VC++ 2005重新编译boost,或者稍微修改它,然后再重新编译。是的,这需要付出一定的努力,但这是唯一的方法--您的代码和boost代码都必须根据您想要使用的CRT版本编译。
https://stackoverflow.com/questions/2402939
复制相似问题