心胸决定格局,眼界决定境界...

/verbose:lib 的作用;p nafxcwd.lib 和 LIBCMTD.lib 打架的裁判

警告   不要混合使用运行时库的静态版本和动态版本。在一个进程中有多个运行时库副本会导致问题,因为副本中的静态数据不与其他副本共享。链接器禁止在 .exe 文件内
部既使用静态版本又使用动态版本链接,但您仍可以使用运行时库的两个(或更多)副本。例如,当与用动态 (DLL) 版本的运行时库链接的 .exe 文件一起使用时,用静态(非 
DLL)版本的运行时库链接的动态链接库可能导致问题。(还应该避免在一个进程中混合使用这些库的调试版本和非调试版本)。

【原文网址】http://blog.vckbase.com/zaboli/archive/2010/12/10/52046.html

本机开发环境:VS2010

工程默认的时候。编译时提示如下:


1>nafxcwd.lib(dllmodul.obj) : error LNK2005: 已经在 LIBCMTD.lib(dllmain.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" () 已经在 LIBCMTD.lib(new.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" () 已经在 LIBCMTD.lib(dbgdel.obj) 中定义


可以看出是MFC的库和CRT的库冲突了。一般来说是这哥俩的顺序乱了。mfc的nafxcwd.lib应该在前面,crt的libcmtd.lib应该在后面。
如果当看这些提示,信息可能不全。我们就来介绍一下 /verbose:lib 编译参数。把这个放到 项目-》属性-》连接器-》命令行 中。 然后重新编译项目。就会有如下提示,这样就可以清楚的看到,系统先连接了 libcmtd.lib,然后再连接nafxcwd.lib时出错了

 

那么我们要做的就是“按顺序排除”冲突的库,再“按正确顺序”附加这两个库就行了。。

也就是 排除时的顺序是 libcmtd.lib;nafxcwd.lib 附加时的顺序是 nafxcwd.lib; libcmtd.lib; 貌似顺序不能搞错哦。。。

加入 /verbose:lib 编译参数 后的输出信息很明了,如下:【格子注:Release版本类似

1>------ 已启动生成: 项目: HotTxtUserInfo, 配置: Debug Win32 ------
1>  
1>  正在搜索库
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\LIBCMTD.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib\nafxcwd.lib:
1>nafxcwd.lib(dllmodul.obj) : error LNK2005: 已经在 LIBCMTD.lib(dllmain.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" () 已经在 LIBCMTD.lib(new.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" () 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\msimg32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comctl32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shlwapi.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio10.0\VC\atlmfc\lib\atlsd.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oledlg.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\urlmon.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\daouuid.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ws2_32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\mswsock.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\wsock32.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\libcpmtd.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\comsuppwd.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdiplus.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleacc.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\imm32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winmm.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\msxml2.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\LIBCMTD.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib\nafxcwd.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\msimg32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comctl32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shlwapi.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib\atlsd.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oledlg.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\urlmon.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\daouuid.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ws2_32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\mswsock.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\wsock32.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\libcpmtd.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\comsuppwd.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdiplus.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleacc.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\imm32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winmm.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\msxml2.lib:
1>  
1>  已完成库搜索
1>     正在创建库 I:\project\work\HotProject\DtServer\Debug\HotTxtUserInfo.lib 和对象 I:\project\work\HotProject\DtServer\Debug\HotTxtUserInfo.exp
1>  
1>  正在搜索库
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\LIBCMTD.lib:【格子注:应该在下】
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib\nafxcwd.lib:【格子注:应该在上】
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\msimg32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comctl32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shlwapi.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib\atlsd.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oledlg.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\urlmon.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\daouuid.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ws2_32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\mswsock.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\wsock32.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\libcpmtd.lib:
1>      正在搜索 G:\Program Files\Microsoft Visual Studio 10.0\VC\lib\comsuppwd.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdiplus.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleacc.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\imm32.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winmm.lib:
1>      正在搜索 D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\msxml2.lib:
1>  
1>  已完成库搜索
1>I:\project\work\HotProject\DtServer\Debug\HotTxtUserInfo.dll : fatal error LNK1169: 找到一个或多个多重定义的符号
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

posted @ 2014-06-12 16:01  WELEN  阅读(510)  评论(0编辑  收藏  举报