❶ (求救)VS2012和2010編譯器問題,各問大神走過路過,幫幫忙!
VS2010和VS2012或者sv2008和VS2010,高版本VS編譯都會出現,使用VS2008的D:\Program Files\Microsoft Visual Studio 9.0\VC\bin目錄下的cvtres.exe替換到VS2010版本VS目錄下再編譯成功。
如果不行再用以下操作
上網搜索發現是嵌入清單的問題,於是對該工程以及所有依賴工程進行如下操作右鍵->工程屬性->配置屬性-> 清單工具->輸入和輸出->嵌入清單,選擇[否]
VS2010 2012CLR更換NET版本不像C#可以項目屬性直接更改,需要修改 *.vcxproj裡面 <PropertyGroup Label="Globals">節點添加以下內容
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
VS2012使用VS2010編譯vc++項目以支持XP系統運行,項目屬性 常規平台工具集選擇Visual Studio 2010 (v100),必須同時安裝VS2010 2012
❷ vs2012編寫的c#窗體程序在xp上跑不了,怎麼辦
微軟為了推銷自家平台,默認配置下VS2012和VS2013編寫的應用程序只能在Vista/Win7/Win8上運行。但幸好還保留了生成XP程序的設置項。XP和Win2003的用戶還是大量存在的,我們程序軟體的發布不能不考慮他們。
1.
項目菜單->項目屬性->配置屬性->常規->平台工具集,選擇「VS2013WindowsXP(v120_xp)」;
2. 項目菜單->項目屬性->配置屬性->常規->MFC的使用,選擇在靜態庫中使用MFC;
3.
項目菜單->項目屬性->鏈接器->系統->子系統->控制台或窗口windows(根據你的項目類型選擇),第二項版本號設成5.01。
4. C/C++->代碼生成->運行庫,選擇「多線程調試(/MTd)";
5. 還需要至少帶有Update3(或4),這一點我沒有驗證,因為我直接安裝的就是帶有Update3的VS2013。
以上就OK了。缺點仍然有,例如靜態編譯的EXE比正常動態要大不少,目前我尚未試出動態編譯後在XP中能運行的方法,--不過這個不要緊,因為VS2013版本如此之高,客戶的電腦上很難自帶配有它的運行庫,你即使動態編譯,發布軟體時也還是要帶上運行庫的,只不過在多個程序時只需帶一份運行庫罷了。
另外,我在實際大項目中用上述方法,仍有出錯現象發生。以後再研究吧。一般情況下上述方法就可以了。
在網上另外發現了這個貼子,說得很詳細,包括非IDE的命令行編譯,一起貼到下面:
問題一:編譯出來的exe在xp上面運行提示「不是有效的win32應用程序」
在vs2012/2013版本裡面,其自帶的c編譯器cl.exe,若直接使用cl
a.c編譯,那麼生成出來的exe放在vista及以上版本直接運行沒有問題,但是在xp上則會出來「不是有效的win32應用程序」的出錯提示。這是因為vs2012/2013自帶的c編譯器默認情況下生成的exe會默認只支持vista及以上版本的windows系統。
解決方法:
對於使用命令行cl.exe直接編譯的方式:
先用cl a.c編譯一遍,此時會生成a.exe和a.obj兩個文件,此時,再執行 link b.obj
/subsystem:console,5.01,它會鏈接一個新的a.exe出來,此時的exe就可以在xp上運行了。相比vs2010以及以前版本的編譯器編譯,會多第二步的link過程,後面的參數也很容易理解,subsystem,5.01,此處的5.01是指的windows內核版本號,5.01表示windows
2000 with sp1,即此exe可以在win2000 sp1及以上的windows中執行。
當然,這個地方的/subsystem後面有很多參數,上面給的console,5.01是指命令行程序,如果是有GUI即有窗口的程序,改成windows,5.01即可。!!注意!!此處的5.01一定不要想當然改成5.0就變成windows
2000
不帶sp1的版本,實際上,5.0並不被vs2013的編譯所承認,會報警告不認5.0,就會按照默認的不帶5.01的方式編譯,這樣就無法在vista以下的系統中運行生成的exe了。
對於在vs2013裡面使用新建項目的方式:
右擊相應的項目,選擇「屬性」,在項目屬性頁中的「配置屬性」下面的「常規」裡面,把「平台工具集」,由「Visual Studio 2013
(v120)」改成「Visual Studio 2013 - Windows XP
(v120_xp)」,確定之後,重新生成項目即可。當然這里按這樣修改的話,就只能在winxp及以上的版本系統裡面運行了。
問題二:用vs2010/2012/2013編譯出來的exe在未安裝vc++運行庫的機器上運行時提示」未找到MSVCR120D.DLL「從而無法運行
這是個老問題了,無非就是運行庫動態編譯和靜態編譯的問題了。dll動態載入的話有個好處,它可以減少生成的exe文件的體積,但是缺點就是如果對應的系統環境變數或者exe所在的目錄裡面找不到其所需要的dll文件的話,程序就會拒絕執行。而靜態編譯就是把所有需要的庫都靜態編譯到exe文件裡面,這樣就可以在所有的系統平台上都能運行,但它也有一個缺點,就是生成的exe文件因為已經帶了部分庫的代碼,所以體積會相對動態編譯出來的exe大(具體大多少要根據庫的內容才能確定)。
解決方法:
對於直接使用cl.exe和link.exe編譯連接的方式:
直接在cl.exe編譯的時候或者在makefile裡面把編譯參數加上/MT即可。
對於在vs2013裡面使用新建項目的方式:
右擊相應的項目,選擇「屬性」,在項目屬性頁中的「配置屬性」下面的「C/C++」下面的「代碼生成」一項,由默認的「多線程調試DLL
(/MDd)」,改成「多線程 (/MT)」,確定之後,重新生成項目即可。這樣所得的exe文件就是靜態編譯了。
❸ 怎麼用VS2012寫C語言程序運行結果彈出後那個運行結果的黑框就消失了
在程序的最後加上一行:getch();
就可以了,不過需要添加頭文件<conio.h>
例如:
// 頭文件聲明
#include <conio.h>
// 主函數
int main( void )
{
// TODO 你需要處理的代碼
// TODO 下面一行將是解決你問題的一行
getch();
return 1;
}
解釋:
如果你沒有任何處理,原則是應該會消失的,這樣才是正確的,可能是某些編譯器(比如VC6,很老的)為了方便使用者,它會在主函數退出的時候,自動的給追加上一行可以實現類似功能的代碼,致使你不用寫那一行黑框也不會消失。為了可以更加清楚的學習編程及原理,請使用不方便的編譯器,比如你現在使用的這個。遇到問題,多到網上發貼問。
原理:
你的程序執行後,你希望看到黑框,說明你想看到執行的結果,你也會把執行的結果列印到黑框上,所以你需要的就是保留黑框能夠顯示在你的面前,保留黑框還有別的方法,以上是我比較喜歡的。明確你的目的後,你就去找系統函數,查找哪些系統函數可以成功實現你所需要的功能。這里getch(),這個函數的功能就是從鍵盤上讀入一個字元,字元不回顯在屏幕上,同時他也是一個等待型的函數,就是說它會等待用戶從鍵盤上輸入一個字元,否則它不會執行完成,這樣,你的黑框就停留在你的面前了。
還有,那個黑框的程序一般叫控制台程序,可以叫它控制台,這樣更專業。歡迎你進入計算機的世界,請一定好好學習基礎,不能光學編程,還要多學習計算機組成原理,CPU的工作原理。