一、引言
最近在编译运行有关 cef 的项目的时候,发现总会出现这样的编译问题:
libcef_dll_wrapper13d.lib(process_message_ctocpp.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1900”(HTMLEventHandler.obj 中)
这里,我要编译的项目的原来的编译平台是 Visual Studio 2013(即宏 _MSC_VER = 1800),而我正在使用的 IDE 是 Visual Studio 2017(即宏 _MSC_VER = 1900),出错信息很明确的指出了,当前的编译平台工具集并不匹配。
为什么这里不能兼容呢? Visual Studio 难道没有做到向下兼容吗?
于是我又尝试了下 Visual Studio 2010,结果也不能通过编译。
这下这就是一个有趣的问题了。
二、认识 _MSC_VER
想要探讨这个问题,首先要明白宏 _MSC_VER 的意义是什么:
_MSC_VER 是微软公司推出的 C/C++ 编译器在 ANSI/ISO C99 标准之外i扩展的宏定义,用来定义当前微软公司自己的编译器的主版本。需要注意的是,这并不是 Visual Studio 的版本号,也不是 Visual C++ 的版本号。
至于每个 Visual Studio 对应了值为多少的 _MSC_VER,可以查看这个网址:
现在,我们了解到了,宏 _MSC_VER 表明了当前项目的编译器的主版本。
那么为什么不能