【发布时间】:2011-03-13 07:28:09
【问题描述】:
在发布版本中链接我的 dll 时,我得到 -
1>LINK : 警告 LNK4098: defaultlib “mfc80d.lib”与使用冲突 其他库;使用 /NODEFAULTLIB:library
1>LINK : 警告 LNK4098: defaultlib 'mfcs80d.lib' 与使用冲突 其他库;使用 /NODEFAULTLIB:library
1>LINK : 警告 LNK4098: defaultlib “msvcrtd.lib”与使用冲突 其他库;使用 /NODEFAULTLIB:library
添加 /VERBOSE,我看到以下内容 (sn-p): ...
1> 搜索 D:\Microsoft Visual 工作室 8\VC\atlmfc\lib\mfc80d.lib:
1> 找到“公共:虚拟 __thiscall AFX_MODULE_STATE::~AFX_MODULE_STATE(void)" (??1AFX_MODULE_STATE@@UAE@XZ) 1>
在 mfcs80.lib(dllmodul.obj) 中引用 1> 已加载 mfc80d.lib(MFC80D.DLL)1> 发现“长标准调用 AfxWndProc(结构 HWND__ *,无符号 整数,无符号整数,长)" (?AfxWndProc@@YGJPAUHWND__@@IIJ@Z)
1> 在 mfcs80.lib(dllmodul.obj) 中引用 1> 已加载 mfc80d.lib(MFC80D.DLL)
...
如果我对此的解释正确,则意味着链接器以某种方式将来自(优化的)库 mfcs80 的调用解析为对(未优化的)库 mfc80D 的调用。怎么会这样??
当我添加 /NODEFAULTLIB:mfc80d.lib 时,警告消失了,但我还没有安静下来。顺便说一句,该模块确实在增量链接上遇到了零星的莫名其妙的崩溃,只能通过重新构建来解决。我用的是VS2005。
[编辑:] 将标题更改为包含 DEFAULTLIB,希望能更好地聚焦主题。我确实看到一个明确的行说
已处理的 /DEFAULTLIB:mfc80d.lib
在 /VERBOSE 输出中,以及许多其他(非调试)默认库中。它从何而来?我该如何解决这个问题?
谢谢!
【问题讨论】:
标签: visual-c++ visual-studio-2005 linker