2008-10-20 41 views
11

如果編譯庫中缺少C++運行時msvcr80.dll,是否有任何方法可以確定使用哪個版本創建庫或使其在更高版本的msvcr80.dll上運行?msvcr80.dll缺失

回答

13

VC80 SP1 CRT可再發行組件包將把C運行庫的RTM和SP1版本安裝到%SystemRoot%\WinSxS(假設您使用的是Windows XP或Vista; Windows 2000不支持並排程序集)。如果您安裝了VC8,則CRT可再發行組件包位於%ProgramFiles%\Microsoft Visual Studio 8\VC\redist。如果您沒有安裝VC8,我認爲您可以從Microsoft.com下載CRT可再發行組件包。

此外,找出什麼CRT版本(例如RTM與SP1)是由與VC8或VC9內置二進制需要,可以提取清單:

mt.exe -inputresource:mydll.dll;#1 -out:mydll.dll.manifest 

查找類似這個:

<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"> 
</assemblyIdentity> 

我的可執行文件需要CRT版本9.0.21022.8。此版本號也嵌入在WinSxS子目錄名稱(遺憾的是它是由哈希包圍):

D:>dir c:\windows\WinSxS\*VC90.CRT* 
12/14/2007 02:16 AM <DIR>   amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b 
12/14/2007 02:00 AM <DIR>   x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91 
+2

Mt.exe是Microsoft SDK/Visual Studio軟件包中提供的用於評估清單的工具。有關mt.exe的更多信息,請參見MSDN文檔頁面: http://msdn.microsoft.com/en-us/library/aa375649(VS.85).aspx (確保並查看用戶內容在底部) – Steve 2008-10-20 04:01:13

3

如果你正在編寫和分發提到的DLL,作爲部分考慮使用的Visual C++ 8.0 CRT合併模塊您的安裝程序。

我注意到在Windows SDK 6.1中有一個新的mt.exe工具和新的Visual C++ CRT。我在InstallShield 12安裝程序中使用合併模塊作爲先決條件,並取得了巨大成功。