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目录中的文件就可以看到它们正在被使用。 –