Pio*_*ost 11 c++ linker msvcr90d.dll visual-studio-2008 visual-c++
我发现在Visual C++ 2008问题的调试模式下找不到MSVCR90D.dll,但没有一个给出的答案确实给出了问题的答案.其中大多数都指向关闭增量链接,但没有解释错误的真正原因以及如何在不关闭增量链接的情况下修复它.
我想提一下,我的情况与原问题中的情况略有不同.我正在使用Visual Studio 2008中的C++编译器,但在Qt Creator中不在Visual Studio中.
任何人?
imo*_*ama 11
简单地安装VS2008 Service Pack 1将解决问题,如果它是一个错误,其中调试CRT完全从sxs文件夹中丢失.
我在64位Windows 7上安装了全新的VS2008以及包含VC++项目的解决方案.在运行时加载C++程序集时,调试版本会崩溃,并发出并排错误.
在Vista和Win7(但不是XP)上,SxS错误提供了有关它尝试和未能加载的程序集的详细信息 - 在这种情况下它是VC90.DebugCRT 9.0.22.19.我检查了VC程序集的(嵌入式)清单,果然,它包含了对这个程序集和版本的引用.
检查sxs目录(%System Drive%\ Windows\WinSxS)表明根本没有并排安装VC90 DebugCRT!我安装了VC++运行时,但这些运行时不包含调试运行时.VS2008旨在安装调试运行时,但它不存在.
事实证明VS2008的原始版本 没有安装 64位VC++ DebugCRT,但是安装了SP1.一旦我完成了这个,就不再有运行时异常和并排错误.
以下是编译器的输出。奇怪的是,第二次运行build竟然成功了。但是我怀疑问题可能是由于运行 mt.exe 时出现错误造成的,mt.exe 负责将清单中的信息嵌入到可执行文件中...
Generating Code...
link /LIBPATH:"c:\Qt\4.5.2-vc\lib" /NOLOGO /DEBUG /MANIFEST /MANIFESTFILE:"debug\formExtractor.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:debug\formExtractor.exe @.\nmD932.tmp
mt.exe -nologo -manifest "debug\formExtractor.intermediate.manifest" -outputresource:debug\formExtractor.exe;1
'mt.exe' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'mt.exe' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' : return code '0x2'
Stop.
Exited with code 2.
Run Code Online (Sandbox Code Playgroud)
更新
在链接过程中未能运行 mt.exe 确实是问题的原因。我将 Windows SDK ( C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin) 的路径添加到 PATH 环境变量中,现在可以运行可执行文件。
对各种答案的评论;
@谢伊
sxstrace 的输出 txt 文件为空。不知道为什么。但是应用程序日志中有以下信息:
Faulting application formExtractor.exe, version 0.0.0.0, time stamp 0x4a638ee1, faulting module MSVCR90D.dll, version 6.0.6002.18005, time stamp 0x49e03824, exception code 0xc0000135, fault offset 0x0006f04e, process id 0xf68, application start time 0x01ca08ba801ac5cf.
Run Code Online (Sandbox Code Playgroud)
版本6.0.6002.18005?
这到底是什么?
@基里尔·V·利亚德文斯基
Dependency Walker 发现文件msvcr90d.dll使用了qtwebkit4.dll
c:\windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\MSVCR90D.DLL
msvcr90d.dll但没有找到由可执行文件直接链接的(另一个版本?)文件。但是 DW 似乎没有在任何地方显示它的版本,是吗?
formExtractor.intermediate.manifest 文件之争
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)
从清单文件来看,可执行文件似乎链接到了msvcr90d.dll与qtwebkit4.dll. 奇怪的是,两个版本都msvcr90d.dll存在于c:\windows\winsxs以下子文件夹中的文件夹中
x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_96748342450f6aa2
,并且
x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb
有任何想法吗?
@骑士666
我正在使用 Qt 框架,它是使用我现在使用的编译器编译的,所以我认为这里没有不匹配。此外,Dependency Walker 显示丢失的文件直接msvcr90d.dll链接到可执行文件,因此我认为这不是任何第三方库的错误。
| 归档时间: |
|
| 查看次数: |
17678 次 |
| 最近记录: |