簡體   English   中英

將VS2017 15.2升級到15.3破壞了第三方庫

[英]Upgrading VS2017 15.2 to 15.3 broke third party libraries

我最近將Visual Studio版本更新為最新版本(主要是因為自動更新,而不是我願意這樣做)。 當鏈接使用15.2而非當前版本15.3構建的第三方庫時,這破壞了我的編譯器。 我看到的錯誤是:

“ Library_Name_here.lib”是使用比其他對象更舊的編譯器創建的; 重建舊對象和庫

我正在尋找解決方案的主意,以避免重新編譯這些庫,但是如果不存在,我正在尋找一種方法來編譯與版本無關的庫,而不必在每次更新時都保持重新編譯。

在同一二進制文件中混合和匹配由不同版本的編譯器編譯的代碼(目標文件或靜態庫)不是一個好主意。

在此引用MSDN

為避免難以檢測和診斷的運行時錯誤,建議您不要靜態鏈接到使用不同版本的編譯器編譯的二進制文件。 另外,升級EXE或DLL項目時,請確保升級其鏈接到的庫。 如果您使用的是CRT(C運行時)或STL(標准模板庫)類型,請不要在使用不同版本的編譯器編譯的二進制文件(包括DLL)之間傳遞它們。 有關更多信息,請參見跨DLL邊界傳遞CRT對象的潛在錯誤

因此,解決方案是使用新的編譯器重新編譯所有第三方靜態庫。

幾個月前,當我將VS2015升級到VS2017時,我也遇到了問題,而我在Visual Studio 2015上運行的一個大項目停止了工作。 該項目添加了幾個類庫和外部DLL。

所以我要做的是,從MSDN網站上卸載了Visual Studio 2017的升級版並重新安裝了完整的Visual Studio 2017(選擇默認的功能選擇)。 然后我將我的項目加載到VS2017的新副本中,並添加了所有外部庫的引用,並且它起作用了。

我建議你嘗試相同的

這是在黑暗中拍攝的,基於另一個SO答案: 錯誤C1047:使用比其他對象更舊的編譯器創建的對象文件

重新編譯另一個未啟用鏈接時間代碼生成的庫( /GL/LTCG )。 啟用它后,庫將期望鏈接器完成大部分編譯,並且您不能期望編譯器的一個版本可以完成編譯的另一個版本。

不要在活動項目中禁用它,因為它可以顯着提高性能。 就在圖書館。

主要的編譯器版本可能仍需要重建第3方庫,但不是次要的。

您可以從VS2017中執行此操作。 它允許您使用一直到VS2008的工具集

詳情請見!

https://blogs.msdn.microsoft.com/vcblog/2016/02/24/stuck-on-an-older-toolset-version-move-to-visual-studio-2015-without-upgrading-your-toolset/

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM