VS2015编译程序兼容XP
前記
這幾天被2015編譯的程序要在xp上運行搞得想死,各種試,真的比寫代碼要痛苦,在此記下一些要點以防下次使用。。。
一、動態鏈接發布
?
1. 項目菜單->項目屬性->配置屬性->常規->平臺工具集,選擇“Visual Studio 2015 - Windows XP (v140_xp)”;
2. 項目菜單->項目屬性->配置屬性->常規->MFC的使用,你的MFC的使用應是這個 在共享 DLL 中使用 MFC
3. 項目菜單->項目屬性->鏈接器->系統->子系統->控制臺或窗口windows(根據你的項目類型選擇),第二項版本號設成5.01。
4. C/C++->代碼生成->運行庫,選擇“多線程DLL(/MD)";注意區別,多線程DLL調試,是動態鏈接時選擇,而且在debug下使用,而多線程DLL在發布release時選擇,此外還有多線程,多線程調試,此為靜態鏈接時選擇。
5. 把2015的update裝了,否則你會發現沒有Visual Studio 2015 - Windows XP (v140_xp)這個選項。
?
注:如果你調用了別人的DLL(LoadLibrary),被調用的庫也要按這種方式編譯,否則可能加載庫失敗。
二、靜態鏈接發布
?
1. 項目菜單->項目屬性->配置屬性->常規->平臺工具集,選擇“Visual Studio 2015 - Windows XP (v140_xp)”;
2. 項目菜單->項目屬性->配置屬性->常規->MFC的使用,你的MFC的使用應是這個?在靜態庫中使用 MFC
3. 項目菜單->項目屬性->鏈接器->系統->子系統->控制臺或窗口windows(根據你的項目類型選擇),第二項版本號設成5.01。
4. C/C++->代碼生成->運行庫,選擇“多線程(/MT)";注意區別,多線程DLL調試,是動態鏈接時選擇,而且在debug下使用,而多線程DLL在發布release時選擇,此外還有多線程,多線程調試,此為靜態鏈接時選擇。
5. 把2015的update裝了,否則你會發現沒有Visual Studio 2015 - Windows XP (v140_xp)這個選項。
注:動態方式不行再使用靜態方式,因為我這邊的程序都是動態編譯的。要是改成靜態麻煩死。
下面以我的一個程序,依賴boost庫來說明:
一開始選擇動態編譯怎么樣都不能運行,提示這是一個無效的win32應用程序,真嗶了狗了,沒辦法,使用大招靜態編譯。
設置好上面說的選項,然后重新編譯boost庫,我的boost版本為boost_1_64_0,我這邊的boost的庫是從同事那邊弄來的,可能編譯選項它有默認設置,這個我沒有深究,總之,我改成靜態編譯
打開VS2015 x86控制臺,運行 b2.exe link=static runtime-link=static ,這兩個參數有什么區別,我也沒搞懂,就編吧,然后出現successfully built,非常高興啊,沒有出現意外,此時庫名字libboost_atomic-vc140-mt-s-1_64.lib, 看見沒mt-s 靜態編譯非調式用的,對應的調式用的libboost_atomic-vc140-mt-sgd-1_64.lib,gd表示調試。??
下面再看下動態的是什么樣的。libboost_atomic-vc140-mt-1_64.lib 注意沒用-s ,這是非調試版,對應的調試版應該有gd,但是這個boost還會生成dll,我實在搞不懂這都是什么跟什么,但是只要我能運行,不管它。。。
然后在我的xp虛擬機上運行然后發現,無法定位輸入點getlogicalprocessorInformation于動態鏈接庫Kernel32.dll(動態的可以),臥槽這又是什么鬼東西,然后搜索,發現我的系統是xp sp2 ,好像sp3可以,然后放到sp3上,運行成功了,但是sp2 ,sp1不行,沒辦法好歹也算進步了。。。
?
總結
以上是生活随笔為你收集整理的VS2015编译程序兼容XP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支持Win7的星号密码查看器的实现
- 下一篇: 国科大—矩阵分析与应用(李老师)—复习提