正确解决"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的错误。如果问题依然存在,可能需要更细致地检查项目的依赖关系,确保没有任何遗漏的地方使用了不一致的运行时库配置。
以上内容仅供参考,具体问题具体分析,如果对你没有帮助,深感抱歉。