Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;应用程序(调试版本)包含VS运行库msvcr90.dll和msvcr90d.dll_C++_Dll - Fatal编程技术网

C++ C++;应用程序(调试版本)包含VS运行库msvcr90.dll和msvcr90d.dll

C++ C++;应用程序(调试版本)包含VS运行库msvcr90.dll和msvcr90d.dll,c++,dll,C++,Dll,我正在使用VS2008创建我的应用程序的调试版本。 编译后,当我尝试运行应用程序时,我得到了著名的“MSVCR90.dll丢失”错误 起初,我试图将MSVCR90.dll从winsxs文件夹复制到应用程序文件夹中,但我遇到另一个著名错误“应用程序试图错误地加载C运行时库” 最后,我尝试检查应用程序的依赖性,它向我揭示了一些奇怪的东西。有两个MSVCR90库作为应用程序的依赖项—msvcr90d.dll和MSVCR90.dll。我不知道这个库的非调试版本是如何进入我的应用程序的 我可能做错了什么。

我正在使用VS2008创建我的应用程序的调试版本。 编译后,当我尝试运行应用程序时,我得到了著名的“MSVCR90.dll丢失”错误

起初,我试图将MSVCR90.dll从winsxs文件夹复制到应用程序文件夹中,但我遇到另一个著名错误“应用程序试图错误地加载C运行时库”

最后,我尝试检查应用程序的依赖性,它向我揭示了一些奇怪的东西。有两个MSVCR90库作为应用程序的依赖项—msvcr90d.dll和MSVCR90.dll。我不知道这个库的非调试版本是如何进入我的应用程序的

我可能做错了什么。提前谢谢

这是一张照片:

我找到了答案

我使用/VERBOSE:LIB链接器标志来找出链接的哪个部分将MSVCR90.dll(release)库添加到我的应用程序中

后来对libs/exe使用了/NODEFAULTLIB:MSVCRT.lib链接器标志,以避免使用库的MSVCRT.lib(release)版本,并在链接过程中强制执行“无冲突”。这将避免在可执行文件/库中出现两个版本的MSVCRT库引用


注意:如果要避免在应用程序中使用MSVCRT的调试版本,然后您可以使用/NODEFAULTLIB:msvcrdt.lib

您可以使用Dependency Walker查看应用程序正在从
msvcr90.dll导入哪些函数。猜测:您正在链接在发布模式下构建的外部库。我试图将msvcr90.dll从winsxs文件夹复制到应用程序文件夹中-不要这样做-通常最好使用安装程序安装运行时。有两个MSVCR90库作为应用程序的依赖项—msvcr90d.dll和MSVCR90.dll—有人(您或静态库)根据运行时的发布版本构建了一些内容。您需要遍历每个库和项目才能找到它。在运行时没有足够的详细信息来诊断不匹配的来源。@Ari0nhh我尝试过这样做,但dependency walker除了显示“打开指定文件时出错”之外,没有显示任何其他内容—我将上载一张该文件的照片。@RichardCriten也许你是对的。但是有数百个库(我们在不同的文件夹中都有调试/发布版本的库)。有什么工具我可以用吗?