1. 程式人生 > >【轉載】R6034錯誤,C Runtime Error

【轉載】R6034錯誤,C Runtime Error

這是我轉的一篇非常全的帖子 

能查到的解決方法都在裡面有提及: 

我是使用 stdafx.h加入這句

code #pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"") 解決的 

vs2008的話改成VC90.CRT 

version='8.0.50608.0' 改成你的vs的版本. 

以下是轉載的全文    

一個專案從vc6遷移到VS2005,在修改了一系列的型別警告後。編譯成功了,Debug的時候,結果卻冒出一個R6034錯誤:"An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information."
      Output Window:app.exe 中的 0x7c984ed1 處最可能的異常: 0xC0000142: DLL Initialization Failed。
      編譯條件是:Linker->Manifest File ->Allow Isolation:Yes。

    在同樣的編譯條件下,Release則可以正常編譯執行。 採取解決措施:在stdafx.h檔案中加入: #pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
   之後,除錯中出現若干錯誤,遮蔽掉錯誤程式碼,可以執行,只是最前面的一個splash窗體沒有了。
   (參考:http://forums.microsoft.com/china/ShowPost.aspx?PostID=1988459&SiteID=15
) 在此之前,參考了很多關於R6034錯誤的網頁,主要是考慮manifest:     (1)磁碟系統是fat32格式的:FAT32的時間精度不夠,所以linker在生成檔案的時候會出錯,如果是ntfs的就沒有問題.VS2005專案設定裡面在清單工具(Manifest Tool)下面有一個選項"使用FAT32解決辦法"(Use FAT32 work around)是專門解決這個問題的.對於FAT32的磁碟,需要選擇"Yes",預設是"No".     (2)Visual Studio 2005用嚮導生成的專案,在執行時可能會遇到找不到MFC80UD.dll的問題。這個問題可能是Manifest 引起的,因此我們可以通過修改專案屬性(properties)->清單工具(property pages)->連結(linker)-->manifest file -->Allow Isolation,把“嵌入清單”選“否”,.然後編譯、連結、執行即可。 Visual Studio 2005用嚮導生成的專案,在執行時可能會遇到找不到MFC80UD.dll的問題。這個問題可能是Manifest 引起的,因此我們可以通過修改專案屬性->清單工具->輸入輸出,把“嵌入清單(Embed Manifest)”選“否”,.然後編譯、連結、執行即可。     (3)有人提示,在專案屬性裡,mfc的使用應該設定為靜態連結。但我改成靜態後,會有很多錯誤,於是放棄。     (4)問了一個論壇上的網友,他說可能和Microsoft C++ Runtime Library有關係。      除此之外,一個參考文獻上說的解決方法是:將Linker->Manifest File ->Allow Isolation:Do not Allow Side by Side isolation,則無論在Debug和Release條件,都出現如下:This application has failed to start because MSVCR80D.dll was not found. Re-installing the application may fix the problem."     關於這個問題,有篇部落格文章上說: 問題描述:大部分的vs.net 2005的使用者在新建“win32專案-windows應用程式”的時候,新建的工程都通不過去,出現如下提示: 
Solution to “MSVCR80D.dll not found”
“沒有找到MSVCR80D.dll,因此這個應用程式未能啟動。重新安裝應用程式可能會修復此問題。”

問題所在:由於vs.net 2005 採用了一種新的DLL方案,搞成一個exe還要配有一個manifest檔案(一般在嵌入檔案裡了,所以看不到,不過也可以不嵌入,這樣會生產一個<程式名>.exe.manifest的檔案,沒它exe自己就轉不了了:)這是個新功能,微軟弄了個新工具(mt.exe),結果不好用,好像是fat32下時間戳有問題(在ntfs下這個問題就沒有了),搞得manifest有時嵌入不到exe中(預設配置是嵌入的,所以就報錯找不到dll了。 

解決方案
1. 微軟的解決方案。
  在“屬性->配置屬性->清單工具->常規“下有一個”使用FAT32解決辦法,設定為"是"
2. 找到你的工程的資料夾,如(myproject),找到其下的myproject\myproject\Debug\,Delete it. 參考:     12。http://forums.microsoft.com/china/ShowPost.aspx?PostID=1988459&SiteID=15

我也碰到上面的問題,上面是解決方案。直接在stdafx.h標頭檔案中加入這個就可以了。#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")