正确解决“error LNK2005: “private: __thiscall type_info xxxxx中定义 MSVCRTD.lib“的有效解决方法

正确解决"error LNK2005: “private: __thiscall type_info::type_info(class type_info const &)” (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义 MSVCRTD.lib"的有效解决方法

报错问题

error LNK2005: “private: __thiscall type_info::type_info(class type_info const &)” (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义 MSVCRTD.lib

报错原因

这个错误信息表明在你的项目链接过程中出现了多重定义错误。具体来说,type_info类的复制构造函数被多次定义,分别在LIBCMT.lib(静态多线程C运行时库)和MSVCRTD.lib(多线程调试DLL运行时库)中。

解决这个问题通常需要确保你的项目中所有编译单元(源文件)和链接的库都使用了相同类型的运行时库设置。这是因为不同的运行时库(如静态链接与动态链接,或调试与非调试版本)之间不兼容,混合使用会导致符号冲突,如你所遇到的错误。

下滑查看解决方法

解决方法

解决方法如下:

1.统一运行时库设置:
打开你的Visual Studio项目属性。
导航到配置属性 -> C/C++ -> 代码生成 -> 运行时库。
确保所有的项目和任何静态库或动态库(如果你有控制权的话)都使用了相同的设置。如果你的项目是调试模式,选择多线程调试 DLL(/MDd);如果是发布模式,则选择多线程 DLL(/MD)。如果你想要使用静态库版本,对应的分别是多线程(/MT)和多线程调试(/MTd)。

2.检查第三方库设置:
如果你的项目依赖了第三方库,确保这些库也是用相匹配的运行时库编译的。如果第三方库不提供与你项目设置匹配的版本,你可能需要重新编译第三方库,或者调整你的项目设置以匹配第三方库的设置。

3.清理并重新生成:
在修改了设置之后,彻底清理解决方案(Build -> Clean Solution),然后重新生成(Build -> Rebuild Solution),以确保所有更改生效,并清除可能存在的旧对象文件。

通过以上步骤,你应该能解决LNK2005的错误。如果问题依然存在,可能需要更细致地检查项目的依赖关系,确保没有任何遗漏的地方使用了不一致的运行时库配置。

以上内容仅供参考,具体问题具体分析,如果对你没有帮助,深感抱歉。

  • 5
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值