2014-05-08 46 views
1

我最近爲Windows應用程序,一個2048遊戲寫了一個相當簡單的代碼,其中包括一些基礎知識,如圖標,背景和東西,4個按鈕用於不同的方向和4x4靜態數組輸出窗口。該守則並不真正「好」,但由於我仍然在學習,所以我發現它已經足夠了(至少在我的電腦上)。我使用默認的VS13配置,在我安裝它之後沒有改變任何東西,代碼是用C++編寫的。 代碼可以在這裏找到:https://www.dropbox.com/sh/15y1daq2h3jm8p7/AADp0m1EfUJo3W2z315Zgd0Wa不能在任何其他機器上運行Windows應用程序

現在我是什麼錯誤,該方案以0警告或錯誤編譯和我預期它時,我要麼通過調試或從桌面我的電腦上運行,它的工作原理而已,但是當我把它上傳到保管箱,並想開始讓我們說在筆記本電腦上,然後它不起作用。 此外,如果我嘗試編譯Codeblocks中完全相同的代碼,我不能和警告許多函數沒有在範圍中聲明。 可以解釋爲什麼會發生這種情況,我該如何解決?

+1

你能分享確切的錯誤嗎? –

+0

msvcp120d.dll丟失是我下載第一個錯誤之後,它只是說我的應用程序不是有效的win32應用程序。 – Survaf93

+1

您是否在筆記本電腦上安裝了VC++運行時可再發行組件? – LeleDumbo

回答

0

您面臨的基本問題是,您正試圖編譯Visual Studio環境以外的代碼,以獲得您編寫的VCPP代碼。

當您使用Visual Studio調試代碼時,所有必需的文件/依賴項在編譯期間被注入。

我建議使用Visual Studio打包代碼,並嘗試在您的筆記本電腦上運行該exe文件。

確保您的目標機器上安裝了正確版本的VC++運行時環境。 (您也可以選擇性地包括與包裝安裝的安裝。)


從這裏:https://stackoverflow.com/a/20890610/1477051

正如你可以看到here,該MSVCP DLL是該平臺的 執行的C++標準庫。總之,這意味着 是你不能分發你的應用程序,而不需要這些庫提供的「東西」 。不管平臺 的所有編譯器都需要某種類型的標準庫實現。通常這是以庫的形式分發的。

但是,您可以分發您的應用程序,以便直接內置到您的程序中的「東西」爲 ,而不是以單獨的DLL形式發送到 。爲此,您必須將您的 應用程序靜態鏈接到標準庫。

有幾種方法可以做到這一點。一種方法是在項目 設置。在「配置屬性」>「C/C++代碼生成」> 「運行時庫」中,選擇「Multithreaded(/ MT)」,而不是 「Mutithreaded(靜態)」。

順便說一下,您在上面提到的「MSVCP120D.dll」中的「D」表示 「調試」。這意味着您正在嘗試分發您的程序的調試版本 。你應該(幾乎)不會這樣做。分發版本 代替。

+0

哇,現在好了我學到了一些非常有用的感謝,但是現在我在文件中出現錯誤,我從來沒有聽說過任何可以幫助我的機會?我已將運行時庫更改爲/ MT – Survaf93

+0

1> ------開始構建:項目:w2048,配置:調試Win32 ------ 1> 2048Main.cpp 1> libcpmtd.lib(stdthrow .obj):error LNK2019:無法解析的外部符號__CrtDbgReportW在函數「void __cdecl std :: _ Debug_message(wchar_t const *,wchar_t const *,unsigned int)」中引用 1> c: \ users \ admin \ documents \ visual studio 2013 \ Projects \ w2048 \ Debug \ w2048.exe:致命錯誤LNK1120:1無法解析的外部設備 – Survaf93

+0

設置編譯器標誌/ MTd(多線程調試運行時庫)將解決此問題。 –

相關問題