我正在使用botan Libary在vs 2008上生成Qr代码我收到错误“R6034:尝试错误地加载C运行时库”。
它的MFC / C ++应用程序和
使用MFC:在共享DLL中使用MFC
代码生成:“多线程调试DLL(/ MDd)”
我已经完成了四分之一的线程他们说需要添加的清单文件我已经有了一个,请帮我解决这个问题
这是我的App.exe.manifest.v “sigcheck.exe - m QrCodeTest.exe”
<?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"> </requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugMFC" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
输出:
'QrCodeTest.exe': Loaded 'D:\Project\QrCodeTest\Debug\QrCodeTest.exe', Symbols loaded.
QrCodeTest.exe': Loaded 'C:\Windows\System32\ntdll.dll'
QrCodeTest.exe': Loaded 'C:\Windows\System32\kernel32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\KernelBase.dll'
'QrCodeTest.exe': Loaded 'D:\Project\QrCodeTest\Debug\botan.dll', Binary was not built with debug information.
'QrCodeTest.exe': Loaded 'C:\Windows\System32\advapi32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\msvcrt.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\sechost.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\rpcrt4.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\user32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\gdi32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\lpk.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\usp10.dll'
'QrCodeTest.exe': Loaded 'D:\Project\QrCodeTest\Debug\msvcp90.dll'
'QrCodeTest.exe': Loaded 'D:\Project\QrCodeTest\Debug\msvcr90.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugmfc_1fc8b3b9a1e18e3b_9.0.30729.1_none_bfff6c932d60651e\mfc90ud.dll', Symbols loaded.
'QrCodeTest.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll', Symbols loaded.
'QrCodeTest.exe': Loaded 'C:\Windows\System32\shlwapi.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.windows.common-con trols_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\msimg32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\oleaut32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\ole32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcp90d.dll', Symbols loaded.
'QrCodeTest.exe': Loaded 'C:\Windows\System32\imm32.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\msctf.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\uxtheme.dll'
'QrCodeTest.exe': Loaded 'C:\Windows\System32\dwmapi.dll'
The program '[2708] QrCodeTest.exe: Native' has exited with code -1073741502 (0xc0000142).
依赖 我运行Debug exe对依赖,这里botan应该加载 MSVCP90.dll和MSVCR90.dll而不是MSVCP90D.dll和MSVCR90D.dll。这就是混乱的原因。如果它是如何纠正它。
答案 0 :(得分:2)
这一定是Botan.dll构建方式引起的问题。很明显,你已经获得了这个DLL的发布版本,因为它依赖于CRT的发布版本。通常,与使用CRT的调试版本的调试版本相比,非常不健康的混合会导致难以诊断运行时错误或内存泄漏。
DLL应该有自己的清单,说明其依赖关系。嵌入为具有资源ID的RT_MANIFEST 2.您可以检查Botan.dll是否在Visual Studio中有一个。使用File + Open + File,选择Botan.dll,您将看到资源。找到RT_MANIFEST节点并将其打开。验证资源2是否存在,并确认它需要“Microsoft.VC90.CRT”
期望您没有看到它,触发错误。使用正确的清单构建它并且通常尝试获取此DLL的调试版本对于获得成功非常重要。
答案 1 :(得分:0)
我已经下载了botan源代码,它是来自的Qt Creator Source的一部分 ftp://ftp.qt-project.org/qtcreator/qt-creator-2.1.0-src 并在Qt Creator中编译它。 它会给你botand.dll和botand.lib这是botan lib的调试版本。如果你从http://botan.randombit.net/download.html,it下载Windows二进制文件将不包含显而易见的调试版本二进制文件。它可能对某些人运行良好但也会对其他人造成问题。所以以这种方式生成调试二进制文件。
希望它会帮助别人