一個(gè)項(xiàng)目從vc6遷移到VS2005,在修改了一系列的類型警告后。編譯成功了,Debug的時(shí)候,結(jié)果卻冒出一個(gè)R6034錯(cuò)誤:"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則可以正常編譯運(yùn)行。
采取解決措施:在stdafx.h文件中加入:
在此之前,參考了很多關(guān)于R6034錯(cuò)誤的網(wǎng)頁(yè),主要是考慮manifest:
(1)磁盤系統(tǒng)是fat32格式的:FAT32的時(shí)間精度不夠,所以linker在生成文件的時(shí)候會(huì)出錯(cuò),如果是ntfs的就沒(méi)有問(wèn)題.VS2005項(xiàng)目設(shè)置里面在清單工具(Manifest Tool)下面有一個(gè)選項(xiàng)"使用FAT32解決辦法"(Use FAT32 work around)是專門解決這個(gè)問(wèn)題的.對(duì)于FAT32的磁盤,需要選擇"Yes",默認(rèn)是"No".
(2)Visual Studio 2005用向?qū)傻捻?xiàng)目,在運(yùn)行時(shí)可能會(huì)遇到找不到MFC80UD.dll的問(wèn)題。這個(gè)問(wèn)題可能是Manifest 引起的,因此我們可以通過(guò)修改項(xiàng)目屬性(properties)->清單工具(property pages)->鏈接(linker)-->manifest file -->Allow Isolation,把“嵌入清單”選“否”,.然后編譯、鏈接、運(yùn)行即可。
Visual Studio 2005用向?qū)傻捻?xiàng)目,在運(yùn)行時(shí)可能會(huì)遇到找不到MFC80UD.dll的問(wèn)題。這個(gè)問(wèn)題可能是Manifest 引起的,因此我們可以通過(guò)修改項(xiàng)目屬性->清單工具->輸入輸出,把“嵌入清單(Embed Manifest)”選“否”,.然后編譯、鏈接、運(yùn)行即可。
(3)有人提示,在項(xiàng)目屬性里,mfc的使用應(yīng)該設(shè)置為靜態(tài)鏈接。但我改成靜態(tài)后,會(huì)有很多錯(cuò)誤,于是放棄。
(4)問(wèn)了一個(gè)論壇上的網(wǎng)友,他說(shuō)可能和Microsoft C++ Runtime Library有關(guān)系。
除此之外,一個(gè)參考文獻(xiàn)上說(shuō)的解決方法是:將Linker->Manifest File ->Allow Isolation:Do not Allow Side by Side isolation,則無(wú)論在Debug和Release條件,都出現(xiàn)如下:This application has failed to start because MSVCR80D.dll was not found. Re-installing the application may fix the problem."
關(guān)于這個(gè)問(wèn)題,有篇博客文章上說(shuō):
問(wèn)題描述:大部分的vs.net 2005的用戶在新建“win32項(xiàng)目-windows應(yīng)用程序”的時(shí)候,新建的工程都通不過(guò)去,出現(xiàn)如下提示:
Solution to “MSVCR80D.dll not found”
“沒(méi)有找到MSVCR80D.dll,因此這個(gè)應(yīng)用程序未能啟動(dòng)。重新安裝應(yīng)用程序可能會(huì)修復(fù)此問(wèn)題。”
問(wèn)題所在:由于vs.net 2005 采用了一種新的DLL方案,搞成一個(gè)exe還要配有一個(gè)manifest文件(一般在嵌入文件里了,所以看不到,不過(guò)也可以不嵌入,這樣會(huì)生產(chǎn)一個(gè)<程序名>.exe.manifest的文件,沒(méi)它exe自己就轉(zhuǎn)不了了:)這是個(gè)新功能,微軟弄了個(gè)新工具(mt.exe),結(jié)果不好用,好像是fat32下時(shí)間戳有問(wèn)題(在ntfs下這個(gè)問(wèn)題就沒(méi)有了),搞得manifest有時(shí)嵌入不到exe中(默認(rèn)配置是嵌入的,所以就報(bào)錯(cuò)找不到dll了。
解決方案
1. 微軟的解決方案。
在“屬性->配置屬性->清單工具->常規(guī)“下有一個(gè)”使用FAT32解決辦法,設(shè)置為"是"
2. 找到你的工程的文件夾,如(myproject),找到其下的myproject\myproject\Debug\,Delete it.
參考:
posted on 2008-03-08 12:17
MDnullWHO 閱讀(1263)
評(píng)論(0) 編輯 收藏 引用