首页 > 其他 > 详细

[转]解决在库中已定义的办法

时间:2014-05-13 19:30:09      阅读:492      评论:0      收藏:0      [点我收藏+]

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编译参数吧。这次之所以没有使用它,也是为了严谨起见。

[转]解决在库中已定义的办法,布布扣,bubuko.com

[转]解决在库中已定义的办法

原文:http://www.cnblogs.com/taozijy/p/3724287.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!