This SO post: Is Visual-C++-2017 binary compatible with VC++-2015?很明顯地說VS 2016與VS 2015是二進制兼容的,它甚至看起來像官方位置。VS2017和VS2015之間的二進制兼容性
我的問題是,在過去,我清楚地記得運行到鏈接器錯誤(我不記得具體的一組錯誤),每次我試圖鏈接在一個靜態庫編譯了不同版本的MSVC轉換爲使用MSVC的新版本構建的EXE。
然而,二進制(in)的兼容性聽起來像是在你的臉上炸開運行時,而不是鏈接時間。
有人能告訴我,如果以前版本的MSVC在版本不匹配時確實生產鏈接器錯誤?這是如何完成的?
編輯
這將如何影響與WPO/LTCG內置靜態庫是否已開啓?我相信這些產生中間目標文件(而不是COFF),而且Microsoft不保證這些中間文件的格式在不同版本的編譯器中保持停滯。
https://msdn.microsoft.com/en-us/library/ee956429.aspx –
@HansPassant對不起,我不明白。你說的是用VS2013構建的靜態庫,會自動放置一個pragma_detect指令,但是如果我試圖從不同的編譯器鏈接到它,鏈接器錯誤會顯示出來嗎? (即沒有我介入?) – ForeverLearning
「自動」不完全是正確的詞。此#pragma出現在您在程序中使用的#include文件中。這是一個通用機制,編譯器的包含文件只是利用它來檢測嚴重不匹配。它將/ FAILIFMISMATCH「foo = bar」鏈接器指令嵌入到目標文件中,鏈接器僅收集所有的foos並驗證它們是否都是條形碼。只需grep在#pragma的vc/include目錄中的文件就可以看到它們正在被使用。 –