【Visual Studio】讓用VS2012/VS2013編寫的程式在XP中順利運行

來源:互聯網
上載者:User

標籤:system   windowsxp   svc   機器   運行時   軟體   表示   核心版本   串連   

原文轉自 http://blog.csdn.net/asanscape/article/details/38752655

 

      微軟為了推銷自家平台,預設配置下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檔案就是靜態編譯了。

【Visual Studio】讓用VS2012/VS2013編寫的程式在XP中順利運行(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.