在发布版本中链接我的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(无效)” (?? 1AFX_MODULE_STATE @@ UAE @ XZ)1>
在mfcs80.lib(dllmodul.obj)中引用 1 GT;加载 mfc80d.lib(MFC80D.DLL)1>发现“长期stdcall AfxWndProc(struct HWND__ *,unsigned int,unsigned int,long)“ (?AfxWndProc @@ YGJPAUHWND __ @@ IIJ @ Z)
1> 在mfcs80.lib(dllmodul.obj)中引用 1 GT;加载 mfc80d.lib(MFC80D.DLL)
...
如果我正确地解释了这一点,则意味着链接器以某种方式解析来自(优化的)库mfcs80的调用,作为对(非优化的)库mfc80D的调用。怎么会这样??
当我添加/NODEFAULTLIB:mfc80d.lib时,警告消失了,但我还没有安静下来。顺便说一下,该模块确实遭受了增量链接上偶然发生的莫名其妙的崩溃,这只能通过重新构建来解决。我正在使用VS2005。
[编辑:]将标题更改为包含DEFAULTLIB,希望更好地关注主题。我做看到一个明确的行说
已处理/DEFAULTLIB:mfc80d.lib
谢谢!
答案 0 :(得分:2)
您应该检查项目的运行时库设置,听起来像是不匹配。在C / C ++>下的项目设置中代码生成>运行时库,您可以选择:
听起来您的解决方案中的某些项目可能正在使用Debug版本,而其他项目则使用非调试版本。或者,某些项目可能正在使用Debug版本,而其他项目正在使用Debug DLL版本。对于给定的解决方案配置,您希望所有项目都使用相同的设置。
答案 1 :(得分:2)
这个问题很晚才得到解决 - 我将它发布在这里以防万一有一天它会帮助某人。
原来是一个错误的预编译头路径:发布配置指向默认的调试PCH路径。因此,在从调试到发布的过渡中,构建将拖入所有调试PCH内容 - 显然包括MFC #pragma(注释“lib ..”)的一些调试版本(包含在afx头文件中)。干净的构建将正确地重建PCH,但是再次进入调试文件夹 - 从而在转换回调试版本时导致相同的问题。
答案 2 :(得分:0)
这意味着其中一个依赖dll使用不同的run-time library进行编译。
项目 - >属性 - > C / C ++ - > Code Generaion - >运行时库
浏览所有库,看看它们是以相同的方式编译的。
此链接中有关此错误的更多信息:
warning LNK4098: defaultlib "LIBCD" conflicts with use of other libs