VC++/DEFAULTLIB问题

Ofe*_*lon 5 linker visual-studio-2005 visual-c++

在发布版本中链接我的dll时,我得到 -

1> LINK:警告LNK4098:defaultlib'mfc80d.lib'与使用其他库冲突; 使用/ NODEFAULTLIB:库

1> LINK:警告LNK4098:defaultlib'mfcs80d.lib'与使用其他库冲突; 使用/ NODEFAULTLIB:库

1> LINK:警告LNK4098:defaultlib'msvcrtd.lib'与使用其他库冲突; 使用/ NODEFAULTLIB:库

添加/ VERBOSE,我看到以下(片段):...

1>搜索D:\ Microsoft Visual Studio 8\VC\atlmfc\lib\mfc80d.lib:

1>找到"public:virtual __thiscall AFX_MODULE_STATE :: ~AFX_MODULE_STATE(void)"(?? 1AFX_MODULE_STATE @@ UAE @ XZ)1>
在mfcs80.lib(dllmodul.obj)中引用1>已加载mfc80d.lib(MFC80D.DLL)

1>找到"long stdcall AfxWndProc(struct HWND __,unsigned int,unsigned int,long)"(?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输出中,以及许多其他(非调试)默认库.它从何而来?我怎样才能解决这个问题?

谢谢!

Ofe*_*lon 2

这个问题很久以后才得到解决 - 我将其发布在这里,以防有一天它对某人有所帮助。

原来是预编译头路径错误:release配置指向了默认的debug PCH路径。因此,从调试过渡到发布时,构建将拖入所有调试 PCH 内容 - 显然包括 MFC #pragma 的一些调试版本(注释“lib..”)(包含在 afx 标头中)。干净的构建将正确重建 PCH,但会再次进入调试文件夹 - 从而在转换回调试构建时导致相同的问题。