在VS2012中編譯WinXP兼容的程序


  VS2012默認是不兼容Windows XP的,編譯鏈接出來的程序只能在Windows Vista及以上版本的操作系統上運行。可是有時需要在Windows XP上運行,又不得不用VS2012(例如用了C++11的<thread>等等)。這時,就犯愁了。沒關系,這個問題可以搞定。

  首先,你的VS2012必須升級到Update 3,否則無法編譯出WinXP兼容的程序。

在VS2012集成開發環境中

  編譯工程時,在VS2012左側的“解決方案管理器”是單擊右鍵,在右鍵菜單中單擊“屬性”,然后在“配置屬性”->“常規”的選項中找到“平台工具集”,在下拉菜單中選中“Visual Studio 2012 - Windows XP (v110_xp)”選項,單擊“確定”即可。

VS2012 Update 3 的工程屬性界面

 

 

在命令提示符中

  那么,如果我是在命令行中編譯呢?沒關系,把這個“Visual Studio 2012 - Windows XP (v110_xp)”選項的命令行參數查出來就行。

編譯參數:                 /D _USING_V110_SDK71
console子系統鏈接參數:    /SUBSYSTEM:CONSOLE,"5.01"
windows子系統鏈接參數:    /SUBSYSTEM:WINDOWS,"5.01"

 

知道了這三個參數就行了。

 

例如編譯boost庫

在tools\build\v2\engine\build.jam文件中,找到-subsystem console,出現兩次,全部改成-subsystem console,"5.01"

然后在tools\build\v2\tools\msvc.jam文件中,在# 8.0 and above adds some more options.之后加上這一行:

toolset.flags $(toolset).compile DEFINES :  _USING_V110_SDK71_

再找到這兩行:

toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console ;
toolset.flags msvc LINKFLAGS <user-interface>gui : /subsystem:windows ;

把/subsystem:console改成/subsystem:console,"5.01",並把/subsystem:windows改成/subsystem:windows,"5.01",就可以開始編譯了。

 

例如編譯Qt庫

在qtbase\mkspecs\win32-msvc2012\qmake.conf文件中找到這兩行:

QMAKE_LFLAGS_CONSOLE    = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS    = /SUBSYSTEM:WINDOWS

把QMAKE_LFLAGS_CONSOLE參數中的/SUBSYSTEM:CONSOLE參數改成/SUBSYSTEM:CONSOLE,"5.01",把QMAKE_LFLAGS_WINDOWS中的/SUBSYSTEM:WINDOWS參數改成/SUBSYSTEM:WINDOWS,"5.01"。

然后再找這兩行

QMAKE_CFLAGS            = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS

在QMAKE_CFLAGS和QMAKE_CXXFLAGS中都加上/D _USING_V110_SDK71然后就可以開始編譯Qt庫了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM