1. 程式人生 > >升級專案到Vs2015版本的問題整理

升級專案到Vs2015版本的問題整理

提前說明,我升級的專案是從Vs2010升級到Vs2015的,這個過程中遇到許多問題這裡整體作了一個整理。 以下整理內容僅供參考,如果不能正常解決,請參考其他內容,也謝謝大家的分享。 1、拿到手的專案你要確定在原來的環境下是可以正常編譯通過的。 2、用VS2015開啟你的解決方案或者是專案,在要升級的專案上單擊滑鼠右鍵,在彈出的選單中選擇“升級VC++編譯器和庫”選單,效果如下圖: 這時會彈出如下視窗:
如果你已經確定升級了,直接單擊“確定”按鈕即可。 3、上面的設定好後,你可以直接編譯當前專案了,如果你原來專案中使用了一些老舊的函式,可能會出現如下問題:
出現這個問題,是因為微軟從2012版本開始就預設為專案開啟了SDL安全檢查功能,一些老舊的專案可能是忽略這個選項的,這裡給大家提供幾個方式去解決這個問題: 3.1 在專案屬性中選擇 “ C/C++” -> “SDL檢查” -> "否(/sdl)" ,最後“應用”“確定”
注:上面的設定在一些專案中可能可以解決上面的舊函式報錯問題,有就遇到過了,第一天可以正常編譯通過,第二天編譯就不能正常編譯通過。 3.2 根據提示我們可以新增相應的預編譯巨集“_CRT_SECURE_NO_WARNINGS",新增方式如下:
注:這個方式是參考網上的內容設定的,不過在我的專案中沒有起到作用,這裡也記錄一下,萬一別人通過了呢! 3.3 這個方式也是定義一個巨集來解決這個問題,但是需要修改“stdafx.h”這個檔案,可以在檔案中新增如下巨集:
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
為了支援舊版本建議使用下面的方式,這裡的_MSC_VER 是Vs的編譯器版本1700是2012版本的:
注:這個方式在我的專案好用,但並不代表再你們的專案中可以能過。 4、關於使用Boost庫時出現的問題,類似內容如下: std::copy::_Unchecked_iterators::_Deprecate': Call to 'std::copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' VisDataDefine c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 2372 這裡給大家分享一個方式,解決方式如下圖:

注:個人感覺出現這個問題的原因也是因為SDL檢查的原因引起的,我在把SDL檢查關閉時,上面這個選項不用新增也是可以直接編譯通過的。所以感覺本質上還是需要SDL檢查的原因引起的。 5、解決方案配置方式引起的編譯不通過問題,一些專案在Vs2010中使用Debug和Unicode Debug都可以編譯通過,但是切換到Vs2015中使用時,會發現使用Unicode方式進行編譯時是編譯通不過的,即使編譯通過了,再引用庫中也會出現一些未知錯誤,就比如前設定SDL檢查問題,我就有遇到了Vs2010專案使用Unicode和非Unicode都可以編譯通過,而遷移到Vs2015中,按照上面方式設定後,一些庫使用Unicode進行編譯時也可以通過,但時在被引用庫中怎麼設定都不起作用,還會出現一些字串函數出現未被標識定義的問題出現。一次無意的切換了一下配置方式,使用非Unicdoe進行編譯經通過了。所以寫在了這裡給大家進行分享一下。 6、注意函式 在VS2010中一些函式在Vs2015中已經進行了為優化調整,這樣就導致我們的專案不能正常編譯通過,這裡羅列一些遇到的函式: 6.1 使用 greater<int>() 編譯不通過,
經過神起的度娘之後,有人回覆這問題是因為從2012之後的VS版本之後,greater的標頭檔案位置發生了改變,這時我們可以按下面的方式去加一下標頭檔案,程式碼語句如下: 6.2 標準庫中std::make_pair,可以使用std::pair(t1, t2)來進行替換