VS2008无法调试,报错MSVCR90.DLL丢失

(非常之郁闷的一个下午,睡完午觉,发现早上搭好的代码没办法调试了。顿时抓狂了下,后来还是想了下早上干过什么。隐隐约约记得把一个MSVCR90.DLL拖到虚拟机去的感觉,然后还改过shared的项目属性,不过只是个预编译头开关。)

——————

更新,最近发现这个问题可能是由于我的VS2008出问题,有个项目包含stdlib.h就报丢失MSVCR90.DLL。

——2012/04/16

——————

然后就针对性的,先把整个项目重新解压,恢复原来的配置。再者,搜查一下MSVCR90.DLL,发现机子里面还有几个……这是个VS2008相关的Debug用的dll。就郁闷,不是有MSVCR90.DLL了么。怎么会不行。所以就将一个MSVCR90.DLL直接拷到了工程目录。这个时候就报另一个错误,Debug Error。当时第一反应是和之前丢失pthread的情况相同,遂用DLL工具,不过不行,总是说服务端信息不足。之后,再Google了N遍后,看到了如下这么个解决方案:

1. 在“属性”->“C/C++”->“代码生成”->“运行时库”里面设为“多线程DLL”
2. 在程序里添代码:

#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")

“实际上,"Debug"和"Release"只是两套IDE预先设定好的编译参数和宏定义组合(例如我们经常遇到的_DEBUG和NDEBUG宏)。编译 器并不知道Debug和Release之分(不过MD和MDd编译参数会区分Debug版本和Release版本的运行时库)。当混用用Debug设置编译的程序和Release版本的运行时库的时候,由于它们生成的时候使用的是两套不同的编译选项,因此非常可能互不兼容。”

这样就果断可以调试了,而且,还解决了我早上的一个问题:

VS2008无法调试,报错MSVCR90.DLL丢失_第1张图片

不过,这段comment的后面个参数设置,还是有点不懂。需要以后看下。

你可能感兴趣的:(多线程,虚拟机,Google,dll,工具,linker)