首页 > 代码库 > VC编译错误:msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::t.... 已经在 libcmtd.lib(typinfo.obj) 中定义
VC编译错误:msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::t.... 已经在 libcmtd.lib(typinfo.obj) 中定义
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: __CrtDbgReportW 已经在 libcmtd.lib(dbgrptw.obj) 中定义
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _wcslen 已经在 libcmtd.lib(wcslen.obj) 中定义
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _vsprintf_s 已经在 libcmtd.lib(vsnprnc.obj) 中定义
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _sprintf_s 已经在 libcmtd.lib(sprintf.obj) 中定义
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _vswprintf_s 已经在 libcmtd.lib(vswprnc.obj) 中定义
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _swprintf_s 已经在 libcmtd.lib(swprintf.obj) 中定义
1>libcmtd.lib(crt0init.obj) : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
参考:http://blog.csdn.net/wuxch_hz/archive/2010/02/24/5321586.aspx
http://topic.csdn.net/t/20030507/17/1751913.html
解决方法:忽略冲突的库。例如,这里忽略msvcrtd.lib,因为它是我自己的lib里面链接的,而现在编译的exe应该使用libcmtd.lib库。
或者,在exe里面使用dll的配置,即,加入宏定义_AFXDLL,并使用/MDd多线程调试dll配置。
主要是由于运行时库冲突。
2010.3.29 19:01 注:
上面的方法还是不行!会出现其他问题的。
以下是我摸索出的最新的解决方法:
首先,所有的lib文件,使用/MTd或/MT编译。Debug调试模式使用/MTd,Release模式使用/MT。
然后,在自己的程序中也使用/MTd或/MT编译。这样就不会出问题了。
三种编译链接库的方式:
(1)连接Windows库。针对Win32 API编写的应用程序,上面的方法可能带来新问题,可以忽略libcmt.lib库,即可。如果还有其他问题,再忽略相应的库。
(2)MFC静态链接。上面的方法就是针对这种链接方式的,所以没问题。
(3)MFC动态链接。没有试过,应该和(1)类似。
最后补充:如果还不行,直接加入/force:multiple编译参数吧。这次之所以没有使用它,也是为了严谨起见。
By:zhanyonhu
转自:http://zhanyonhu.blog.163.com/blog/static/1618604420102292542353/