问题解决:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1700”不匹配值“1800”

本文介绍了_MSC_VER宏在不同版本的Visual C++编译器中的作用及对应的版本号,解释了当遇到_MSC_VER版本不匹配错误时的原因,并提供了详细的解决步骤。

_MSC_VER这个相当于做了宏的检测  _MSC_VER 定义编译器的版本。下面是一些编译器版本的_MSC_VER值:
MS VC++ 14.0 _MSC_VER = 1900 vs2015
MS VC++ 12.0 _MSC_VER = 1800 vs2013的编译器他的平台是v120
MS VC++ 11.0 _MSC_VER = 1700 vs2012的编译器他的平台是v110
MS VC++ 10.0 _MSC_VER = 1600 Visual C++ 2010
MS VC++ 9.0 _MSC_VER = 1500 Visual C++ 2008
MS VC++ 8.0 _MSC_VER = 1400 Visual C++ 2005
MS VC++ 7.1 _MSC_VER = 1310
MS VC++ 7.0 _MSC_VER = 1300
MS VC++ 6.0 _MSC_VER = 1200
MS VC++ 5.0 _MSC_VER = 1100


error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1700”(main.obj 中) 
原因:由于你使用了vs2012,工作集选择了更高的1800也就是vs2013的,致使msvc不兼容!
方法:在项目(解决方案资源管理器或者属性管理器里都行)右键属性-配置属性-常规中,平台工具集选用为合适平台即可,比如上面的就是要选择成2012的 v11版本,注意光选了还没有用
注意一个工程里面会有几个解决方案的时候,有解决方案需要改而有的不要自己可以查看
还需要重新编译,重新编译在生成菜单重新生成里面

 

==================================================================================================

注:在VS2013IDE中有多个工程(解决方案)时,不同的工程可能会用到不同的版本的VS,可以在属性中进行设置。

1>f:\code\cncautodrlhole\casting_slide_base\casting_slide_base\jfun.cpp(208): warning C4715: “ConfigData::getStandardByName”: 是所有的控件路径都返回 1>xt_lib_uf.lib(xt_windows.obj) : error LNK2038: 检测到“_MSC_VER”的匹配: “1600”匹配1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_modl.obj) : error LNK2038: 检测到“_MSC_VER”的匹配: “1600”匹配1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_assem.obj) : error LNK2038: 检测到“_MSC_VER”的匹配: “1600”匹配1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_block_styler.obj) : error LNK2038: 检测到“_MSC_VER”的匹配: “1600”匹配1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_curve.obj) : error LNK2038: 检测到“_MSC_VER”的匹配: “1600”匹配1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_text.obj) : error LNK2038: 检测到“_MSC_VER”的匹配: “1600”匹配1700”(casting_slide_base.obj 中) 1> 正在创建库 F:\Code\CncAutoDrlHole\casting_slide_base\x64\NX10\/casting_slide_base.lib 和对象 F:\Code\CncAutoDrlHole\casting_slide_base\x64\NX10\/casting_slide_base.exp 1>xt_lib_uf.lib(xt_block_styler.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __cdecl NXOpen::TaggedObject::GetTag(void)const " (__imp_?GetTag@TaggedObject@NXOpen@@QEBAIXZ),该符号在函数 "public: void __cdecl nxform::set_wcs(void)" (?set_wcs@nxform@@QEAAXXZ) 中被引用 1>F:\Code\CncAutoDrlHole\casting_slide_base\x64\NX10\/casting_slide_base.dll : fatal error LNK1120: 1 个无法解析的外部命令
03-19
### 关于 VS2013LNK2038 错误的解决方案 在使用 Visual Studio 2013 (VS2013) 编译目时,如果遇到 `error LNK2038` 错误,提示 `_MSC_VER` 的匹配(例如“1600”匹配1800”),这通常是因为目的库文件与当前编译器版本兼容[^2]。具体来说,`_MSC_VER` 是微软编译器定义的一个宏,用于标识编译器的主版本号。同版本的 Visual Studio 对应同的 `_MSC_VER` ,例如: - Visual Studio 2010: `_MSC_VER = 1600` - Visual Studio 2013: `_MSC_VER = 1800` #### 解决方案 1. **检查并重新编译第三方库** 如果目中使用了第三方库(如静态链接库 `.lib` 或动态链接库 `.dll`),需要确认这些库是否是用与当前目相同的编译器版本生成的。如果第三方库是由旧版本的 Visual Studio(如 VS2010)生成的,则会导致 `_MSC_VER` 匹配问题解决方法是重新使用 Visual Studio 2013 编译这些库[^4]。 2. **调整平台工具集** 在 Visual Studio 2013 中,可以通过更改目的平台工具集来兼容旧版本的编译器。具体步骤如下: - 打开目的属性窗口。 - 导航到 `Configuration Properties -> General`。 - 将 `Platform Toolset` 设置为 `v120`(对应 Visual Studio 2013)或更早版本(如 `v100` 对应 Visual Studio 2010)。需要注意的是,这种做法可能会引入其他兼容性问题[^2]。 3. **清理和重建目** 某些情况下,目中可能残留旧版本的编译结果,导致链接错误。建议执行以下操作: - 清理目:选择菜单栏中的 `Build -> Clean Solution`。 - 重建目:选择菜单栏中的 `Build -> Rebuild Solution`。 4. **检查预编译头文件** 如果目中使用了预编译头文件(如 `stdafx.h`),确保所有源文件都正确包含了该头文件,并且预编译头文件的设置与目一致。如果一致,也可能导致 `_MSC_VER` 匹配问题[^3]。 5. **避免混合使用同版本的库** 确保目中没有同时引用由同版本 Visual Studio 生成的库文件。如果必须使用同版本的库,可以考虑将它们封装为独立的模块或服务[^4]。 ### 示例代码:调整平台工具集 以下是通过修改目属性来调整平台工具集的示例代码片段(假设使用 CMake 构建系统): ```cmake # 设置平台工具集为 VS2013 set(CMAKE_GENERATOR_TOOLSET "v120" CACHE STRING "Platform Toolset" FORCE) ``` ### 注意事 尽管可以通过调整平台工具集或重新编译库来解决 `_MSC_VER` 匹配问题,但这种方法可能会带来其他潜在问题,例如性能差异或功能缺失。因此,在实际开发中,建议尽量使用相同版本的编译器生成所有依赖
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值