MSVC与CRT默认库链接冲突问题
2012-08-14 06:47
731 查看
MFC程序在将MFC的使用方式从<Use MFC in a Static Library>切换到<Use MFC in a Shared Library>,构建时,经常出现如下所示nafxcwd.lib、MSVCRTD.lib、LIBCMTD.lib几个lib库冲突问题。
>nafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
>nafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
……
>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _sprintf 已经在 libcmtd.lib(sprintf.obj) 中定义
>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _strncmp 已经在 LIBCMTD.lib(strncmp.obj) 中定义
……
>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
>F:\…\RtspClient.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
今天又碰到这个问题了,于是写下来。
这个问题是在修改主程序“Use of MFC”选项的时候引起的,主程序引用了其他几个lib库。lib库的配置是<Static Library(.lib)>、<Use Standard Windows Libraries>、代码生成使用的运行库是<Multi-threaded Debug DLL (/MDd)>,主程序修改后的配置是<Application(.exe)>、<Use MFC in a Static Library>、代码生成使用的运行库是<Multi-threaded Debug (/MTd)>。
要解决这个问题,首先要了解MSVCRTD.lib、LIBCMTD.lib干什么用的,还有MSVC与CRT的关系,可以通过这篇文章了解:MSVC与CRT的恩怨情仇。
了解以后,可以采用下面的方法解决问题。
将lib库使用的运行库一致修改为<Multi-threaded Debug (/MTd)>;
由于VS在编译时是按文件名字母序的顺序,同时按需决定要链接的库文件,这里我们强制修改链接顺序。在 配置属性->连接器->输入 中,忽略特定库:nafxcwd.lib;libcmtd.lib,附加依赖项:nafxcwd.lib libcmtd.lib。
这样,构建成功。
>nafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
>nafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
……
>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _sprintf 已经在 libcmtd.lib(sprintf.obj) 中定义
>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _strncmp 已经在 LIBCMTD.lib(strncmp.obj) 中定义
……
>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
>F:\…\RtspClient.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
今天又碰到这个问题了,于是写下来。
这个问题是在修改主程序“Use of MFC”选项的时候引起的,主程序引用了其他几个lib库。lib库的配置是<Static Library(.lib)>、<Use Standard Windows Libraries>、代码生成使用的运行库是<Multi-threaded Debug DLL (/MDd)>,主程序修改后的配置是<Application(.exe)>、<Use MFC in a Static Library>、代码生成使用的运行库是<Multi-threaded Debug (/MTd)>。
要解决这个问题,首先要了解MSVCRTD.lib、LIBCMTD.lib干什么用的,还有MSVC与CRT的关系,可以通过这篇文章了解:MSVC与CRT的恩怨情仇。
了解以后,可以采用下面的方法解决问题。
将lib库使用的运行库一致修改为<Multi-threaded Debug (/MTd)>;
由于VS在编译时是按文件名字母序的顺序,同时按需决定要链接的库文件,这里我们强制修改链接顺序。在 配置属性->连接器->输入 中,忽略特定库:nafxcwd.lib;libcmtd.lib,附加依赖项:nafxcwd.lib libcmtd.lib。
这样,构建成功。
相关文章推荐
- MSVC与CRT默认库链接冲突问题
- MSVC与CRT默认库链接冲突问题
- window7系统使用CRT链接不上的问题
- javascript解决多事件冲突的问题(冒泡行为、默认行为)
- VC默认链接库冲突
- 关于VC链接过程中缺省库的冲突问题
- 关于zlib.lib库和msvcrt.lib库链接冲突的问题
- Dedecms V5.6 默认友情链接问题
- 分享一个链接,MS官方的解释:关于网络上流传的通过修改组策略“解除XP/WIN7系统默认限制20%的网速”来提高网速的问题。希望大家不要被误导。
- “error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限。” 上网找了一下次问题的解决方案 工程设置的问题,VS2005建的STL工程中默认的设置是: ALT的使用:动态链接到 A
- warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;使用 /NODEFAULTLIB:library问题解决方法
- VC编译器-链接 默认库“XXXXX”与其他库的使用冲突 的解决办法
- warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;使用 /NODEFAULTLIB:library问题解决方法
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
- 修改Myeclipse默认的Libraries包集合(用于解决包冲突问题)
- 小程序 input placeholder高度与input默认高度冲突问题
- 缺少mfc100.lib等lib问题和nafxcw.lib与LIBCMT.lib链接冲突问题
- 解决“无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-|1-1-0.dll“问题
- 偶遇问题 - - JavaScript 取消链接默认行为问题
- 链接库加载,“”(*.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x40B9CA00 时发生访问冲突”的问题所在