轉載請標明是引用於 http://blog.csdn.net/chenyujing1234
歡迎大家拍磚!
一、應用背景
有一個在win7中用VS2008編譯成功,運行正常的程序:Exe+DLL;
放到XP虛擬鏡像上運行卻提示:LoadLibrary返回14001。
(1) 后來采用了下面方法中的“方法一”解決了。
(2) 但在方法一的基礎上還要安裝VS2008對應的分發包vcredist_x86.exe
(VS2005的安裝目錄下提供了此文件,但在VS2008去不提供,但可到網上下載)。
參考文章:
http://hi.baidu.com/roger_long/item/867a7cf6fd8cf4cc521c26c5
二、網上資料
有些機器出現這樣的問題,有些沒有!有些控件無問題,有些有問題。以前做安裝測試都是項目經理負責,我從來不關心這種問題。現在的公司,沒有這樣全職的職位負責。還是自己來吧。
根據經驗出現這種問題,肯定動態鏈接的DLL問題
1.在可以使用控件機器上使用 depends 發現,原來比較特別就是安裝了CRT運行
2.不行的機器上,無安裝CRT
3.為什么有一個控件,就算是無安裝CRT也可以運行,但大家都靜態連接到ATL
4.於是把xp的CRT DLL復制到2003,還是不行(可能2003與xp CRT不同,沒有繼續嘗試)
5.到網上找找還真到答案 "loadlibrary 失敗 由於應用程序配置不正確 應用程序未能啟動 crt"
============================================================================
解決:
方法一:
在C:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest
把這幾個文件拷貝到目標機器上,與運行程序同一文件夾或放到system32下,就可以運行那個程序了。
其他release版,MFC程序什么的都是拷redist下相應文件夾下的文件就可以了,文件夾后都有標識!
注意:
(1)如果是VS2008版本的那么到C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT路徑下找文件。
(2)如果是放到system32下,那么還要改系統環境變量。
方法二:
修改編譯選項,將/MD或/MDd 改為 /MT或/MTd,這樣就實現了對VC運行時庫的靜態鏈接,在運行時就不再需要VC的dll了。
方法三:
工程-》屬性-》配置屬性-》常規-》MFC的使用,選擇"在靜態庫中使用mfc"
這樣生成的exe文件應該就可以在其他機器上跑了。
方法四:
你的vc8安裝盤上找到再分發包vcredist_xxx.exe和你的程序捆綁安裝
方法一:原來我就差 Microsoft.VC80.DebugCRT.manifest 這個文件就成功了,可以那個時候沒有繼續試
方法二:這個方法最好,適應多種工程
方法三:MFC才適用吧
方法四:比較大的項目比較好!
三、擴展
解決方法: