当链接我的发布版本的DLL,我得到 -VC++/DEFAULTLIB问题
1> LINK:警告LNK4098:defaultlib 'mfc80d.lib' 与使用其他 库冲突;使用/ NODEFAULTLIB:库
1> LINK:警告LNK4098:defaultlib 'mfcs80d.lib' 与使用其他 库冲突;使用/ NODEFAULTLIB:库
1> LINK:警告LNK4098:defaultlib 'msvcrtd.lib'与其他库的使用冲突 ;使用/ NODEFAULTLIB:库
添加/冗长,我看到下面的(片段): ...
1>搜索d:\微软的Visual Studio的 8 \ VC \ atlmfc \ LIB \ mfc80d.lib:
1> 找到 “公共:虚拟__thiscall AFX_MODULE_STATE ::〜AFX_MODULE_STATE(无效)” (?? 1AFX_MODULE_STATE @@ @ UAE XZ)1>
在mfcs80.lib引用(dllmodul .OBJ ) 1>加载 mfc80d.lib(MFC80D.DLL)1>找到 “长STDCALL AfxWndProc(结构HWND__ *,无符号 整型,无符号整型,长)” (?AfxWndProc @@ YGJPAUHWND __ @@ IIJ @ Z)
1> 在mfcs80.lib引用(dllmodul.obj) 1>加载 mfc80d.lib(MFC80D.DLL)
...
如果我正确解释它,这意味着链接器以某种方式解析来自(优化)库mfcs80的调用,作为调用(非优化)库mfc80D的调用。怎么会这样??
当我添加/NODEFAULTLIB:mfc80d.lib警告消失了,但我还没有安静。顺便说一句,该模块的增量链接确实遭受了零星的无法解释的崩溃,只能通过重新构建来解决。我正在使用VS2005。
[编辑]将标题更改为包含DEFAULTLIB,希望更好地将主题聚焦。我做看到一个明确的行话说
在/ VERBOSE输出处理/DEFAULTLIB:mfc80d.lib
,许多其他(非调试)默认库中。它从何而来?我怎样才能解决这个问题?
谢谢!
感谢 - 但我检查了所有项目(和所有个人文件),而且都用/ MD编译。我有很少的外部依赖项:version.dll,shlwapi.dll和第三方组件,我使用dependency-walker进行了检查,并且似乎与正确的CRT版本(非调试版)链接。/MD交换机是否是对/ DEFAULTLIB交换机的唯一访问?没有其他输入可能会把它搞砸吗? – 2010-07-08 14:57:14