VC++使用静态库,msvcrt.lib连接错误

一个库被编译成了静态库,在工程中使用该静态库,进行链接的时候报如下错误

msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 libcmt.lib(typinfo.obj) 中定义

1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 libcmt.lib(typinfo.obj) 中定义
1>msvcrt.lib(MSVCR80.dll) : error LNK2005: _malloc 已经在 libcmt.lib(malloc.obj) 中定义
1>   正在创建库 ./lib/runsoftengine.lib 和对象 ./lib/runsoftengine.exp


解决办法:

工程属性->链接器->输入->忽略特定库中加入 msvcrt.lib 即可

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

今天自己在编辑一个wxWidgets的项目时,进行编译后,提示链接错误,错误的大致信息时说libcmt.lib里的一些符号重复定义,google搜索一下,说是由于没有启用多线程支持,于是在项目属性-->C/C++-->代码生成-->运行时库,设置值为“多线程(/MT)”,然后再编译,真的通过了。看了分析,是由于单线程时,libcmt.lib和msvcrt.lib都会被链接,但这两者中有很多符号名称一致,导致重复定义的错误,如果选择支持多线程,则msvcrt.lib不会被链接。

你可能感兴趣的:(VC++使用静态库,msvcrt.lib连接错误)