2008-11-16 96 views
12

我知道这样的问题已经被问到,但情况有点不同,所有关于该问题的答案都不适用于我。MSVCR90.DLL找不到

我想在VS2008中编译一些C代码,它不会创建一个EXE文件。此外,当我尝试使用F5运行它,我得到:

此应用程序未能启动 因为MSVCR90.DLL没有找到。

我做了一些Google搜索,它说这是因为我的C++可再发行组件包未安装。所以我安装了它,重启了所有的东西并再次尝试。但是,唉,我仍然有同样的错误。有没有人有任何线索如何解决这个问题?

+0

将您的项目简化为最简单的形式(例如'hello world')并发布代码,makefile,构建日志以及其他任何其他内容,我们可以为您提供帮助。否则,你在黑暗中拍摄。 – 2008-11-16 03:16:13

回答

10

这听起来像是你的VS2008安装有问题,或者你的DLL搜索路径有问题。 MSVCR90.DLL在安装VS2008时安装,您不必安装任何其他可再发行组件包。

首先,我会检查你的PATH环境变量,并确保没有gobbledydook会破坏一些条目,如果你没有发现问题,那么我会卸载并重新安装Visual Studio。

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

如果你只是想现在就走,你可以做的另一件事是改变你的项目静态链接到运行时库,然后它甚至不会尝试加载该DLL。转到您的项目设置,配置属性 - > C/C++ - >代码生成,并将运行时库从多线程DLL更改为多线程(或任何不以DLL结尾的选项)。

6

这里有一些事情在常规选项卡来检查你对以项目的配置:

  • 0.1配置类型 - exe文件在您的案件。
  • .2使用MFC:如果这是一个MFC应用程序,它可能会更便携,如果你这样做:在一个静态库中使用MFC。
  • .3使用ATL - 如果不使用atl(或不确定)说不使用ATL。
  • .4在C/C++ - >运行库中:说多线程调试(用于调试版本)或多线程(用于发布版本)。

如果您收到特定链接的错误,说一些已定义: 这意味着,你有你的应用程序的某些部分(单独林达被链接到你的exe文件),它们具有不同的运行时连接内置:

您可以:

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

  • 更改这些项目为使用静态运行:C/C++ - >代码生成 - >运行时库:/吨或MTD(以上同#4)

  • 如果您仍然有一些具体的错误试着告诉链接器忽略某些库:转到链接器 - >忽略特定库并放入要忽略的库中。这是'libcmt.lib'或'libcmtd.lib'最常见的。知道以'd'结尾的lib通常是调试版本也很重要。如果你正在创建一个发布版本,并且你正在'已经在libcmtd.lib中定义',这意味着你正在将一个发布版本库链接到一个调试库。

0

如果你把完成的exe文件给别人,他们需要安装最新的visual c运行库来运行它。这只适用于发布版本AFAIK。 Visual Studio应该将所需的运行时间都发布和调试安装到您的路径中。该项目可能会为运行时的错误版本意外设置附加依赖项。

看看this page有帮助。

4

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

MSVCR90.dll未安装在system32中,但在并排文件夹中,因此需要清单。

0

转到您的项目设置,配置属性 - > C/C++ - >代码生成并将运行时库从多线程DLL更改为多线程,然后尝试编译但不会。然后将其更改为多线程调试并尝试编译,但不会再次,然后将其更改回多线程DLL,然后它应该编译并运行。

3

我刚刚被这个咬了,this page让我再次工作。

关键是忽略调试配置的MSVCRT和MSVCR90库。设置链接器 - >输入 - >忽略特定库设置,包括以下内容:

  • MSVCRT
  • MSVCR90