2011-08-11 157 views
5

我試圖編譯一個簡單的32位Hello World應用程序,它使用Visual Studio 2010在Windows 7全新安裝的64位機器上用C編寫。安裝Visual Studio後,我還安裝了「Windows SDK for Windows 7和.NET Framework 4」。 我構建了選擇「Win32」作爲平臺的應用程序。它適用於Windows 7,但如果我跑我的32位機與Windows XP專業版的應用程序(新鮮也是這個安裝,無需軟件和服務包)似乎不工作收到此錯誤:在64位機器上使用Visual Studio編譯32位應用程序

"This application has failed to start because msvcr100.dll was not found" 

如果可以Dependency Walker中檢測到2個錯誤(詳見鏈接的圖片)有用:

"Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module." 
"Error: Modules with different CPU types were found." 

http://img820.imageshack.us/img820/4725/errordp.png(圖)

我怎樣才能解決呢?謝謝!

回答

2

不要相信依賴沃克在這...它清楚地顯示您的exe是32位。你的問題是VC可再發行組件,即CRT dll - 在你的VS安裝中尋找vcredist_x86.exe。您應該在運行應用程序之前運行它。

另一種選擇是靜態連接CRT。請參閱/MT option。將使你的EXE更大,但保存vcredist的東西。

+0

我設置了/ MT選項,但是這次我得到了「程序入口點decodepointer不能位於動態鏈接庫kernel32.dll」爲什麼? – mt22

+0

@Lorenzo,DecodePointer從XP SP2開始支持。用/ MT編譯只會讓你更進一步,到這是你的問題的階段......動態鏈接會導致同樣的問題。可以[編譯爲XP的基本版本](http://msdn.microsoft.com/en-us/library/aa383745(v = vs.85).aspx#setting_winver_or__win32_winnt)或更新XP。 – eran

+0

好的,謝謝@eran,另一個小問題:爲什麼我不必信任Dependency Walker這樣的案例?那些錯誤意味着什麼? – mt22

2

這裏的問題是Windows XP機器上缺少編譯程序使用的C運行時。默認情況下,Visual Studio 2010將默認使用10.0(msvcr100.dll)運行時,該運行時在XP上不可用。您需要在您的機器上手動部署C運行時才能運行程序。

您可能需要閱讀下列MSDN文章,其中討論了各地部署與Visual Studio構建C應用程序的問題,2010

可能有額外的工作六十四分之三十二問題,但這似乎是主要問題

1

有關運行時庫的答案是正確的。另一種可能的解決方案是鏈接到靜態運行時庫而不是DLL版本。通過這種方式,您可以構建一個可執行文件,您可以將其放到任何機器上,而無需額外部署麻煩

這是一個權衡,但是,不瞭解更多關於你的情況,這可能是值得考慮的。

相關問題