MSVCR90.DLL未找到。

14

我知道已经有类似的问题被问过了,但情况有所不同,那个问题的所有答案对我都没有用。

我正在尝试在VS2008中编译一些C代码,但它并没有创建可执行文件。当我尝试按f5运行它时,会出现以下错误:

无法启动该应用程序,因为找不到 MSVCR90.DLL。

我查了一些资料,上面说这是因为我的C++可再发行包未安装。于是我安装了它,重启了一切,然后再试了一遍。但是,令人沮丧的是,我仍然遇到同样的错误。有人有任何解决办法吗?


将您的项目简化到最简单的形式(例如“hello world”),并发布代码、makefile、构建日志以及其他任何相关内容,我们可以帮助您。否则,您就是在盲目尝试。 - Steven A. Lowe
对于重复问题的投票下降,这只是你的http://stackoverflow.com/questions/293380/why-isnt-my-c-code-being-compiled-to-an-exe的另一个方面。 - Aidan Ryan
7个回答

12

看起来可能是你的VS2008安装有问题,或者是DLL搜索路径出了问题。MSVCR90.DLL会在安装VS2008时自动安装,你不需要安装任何额外的可再发行包。

首先,我建议你检查你的PATH环境变量,确保其中没有任何错误的条目。如果没有问题,则建议你卸载并重新安装Visual Studio。

你还可以尝试搜索MSVCR90.DLL(以及类似的DLL文件),并将它们移动到Windows/System32文件夹中。

如果你只是想快速解决问题,你也可以将项目设置为静态链接运行时库,这样就不会尝试加载那个DLL文件了。进入你的项目设置,选择“配置属性->C/C++->代码生成”,将运行时库从多线程DLL改为仅多线程(或者任何不以DLL结尾的选项)。


6
以下是需要翻译的内容:

以下是一些检查项目配置的要点——在常规选项卡下:

  • .1 配置类型——在您的情况下为exe。
  • .2 使用MFC:如果这是一个MFC应用程序,如果您执行“将MFC用于静态库”操作,则更易移植。
  • .3 使用ATL——如果没有使用atl(或者不确定是否使用),请说明未使用ATL。
  • .4 在C/C++下——>运行库:说多线程调试(对于调试版本)或多线程(对于发布版本)。

如果出现特定的链接器错误,显示某些内容已经定义:

这意味着您的应用程序(连接到exe的单独库)的某些部分使用了不同的运行时连接方式:

您可以:

  • 确保这些库与您的应用程序使用相同的Visual Studio版本进行编译。

  • 将那些项目更改为使用静态运行时:C/C++——>代码生成——>运行库:/ MT或MTd(与#4上面相同)

  • 如果仍然存在某些特定错误,请告诉链接器忽略某些库:转到链接器->忽略特定库并放入要忽略的库。这最常见的是“libcmt.lib”或“libcmtd.lib”。还要知道,以“d”结尾的库通常是调试版本。如果您正在创建发布版本并且收到“在libcmtd.lib中已定义”,那意味着您在将发布版库链接到调试版库。


4

如果您删除与 .exe 相关联的清单文件,您将会遇到相同的错误。

MSVCR90.dll 并未安装在 system32 中,而是在 side-by-side 文件夹中,因此需要清单文件。


3
我刚刚遇到了这个问题,这个页面帮助我解决了问题。
关键是在调试配置中忽略MSVCRT和MSVCR90库。将链接器的“输入”设置中的“忽略特定库”选项设置为包括以下内容:
- MSVCRT - MSVCR90

1

0
如果您将已完成的exe文件交给其他人使用,他们需要安装最新的Visual C运行时才能运行它。据我所知,这仅适用于发布版本。Visual Studio应该会将所需的运行时(包括发布和调试版本)安装到您的路径中。该项目可能会意外地设置了一个错误版本的运行时的附加依赖项。
请查看此页面是否有帮助。

0

前往项目设置,配置属性->C/C++->代码生成,将运行库从多线程DLL更改为多线程,然后尝试编译,但不会成功。然后将其更改为多线程调试并尝试编译,但仍然无法成功,然后将其改回多线程DLL,然后应该可以编译和运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接