代码之家  ›  专栏  ›  技术社区  ›  Ofek Shilon

VC++/DEFAULTLIB问题

  •  5
  • Ofek Shilon  · 技术社区  · 15 年前

    1>链接:警告LNK4098:defaultlib

    1>链接:警告LNK4098:defaultlib “mfcs80d.lib”与的使用冲突

    “msvctd.lib”与的用法冲突 其他LIB;使用/NODEFAULTLIB:库

    添加/VERBOSE后,我看到以下内容(代码段): ...

    1>正在搜索D:\Microsoft Visual 工作室8\VC\atlmfc\lib\mfc80d.lib:

    1> (??1AFX\模块\状态@@UAE@XZ)1>
    在mfcs80.lib(dllmodul.obj)中引用 1>加载

    1>找到“长stdcall” int,unsigned int,long)“ (?AfxWndProc@@YGJPAUHWND)__@@IIJ@Z)

    1> 在mfcs80.lib(dllmodul.obj)中引用 1>加载 mfc80d.lib(mfc80d.DLL)

    ...

    如果我的解释正确的话,这意味着链接器以某种方式解析来自(优化的)库mfcs80的调用,作为对(非优化的)库mfc80D的调用。这怎么可能??

    [编辑:]将标题更改为包含DEFAULTLIB,希望能更好地集中主题。我

    已处理/DEFAULTLIB:mfc80d.lib

    在/VERBOSE输出中,在许多其他(非调试)默认lib中。它是从哪里来的?我怎样才能解决这个问题?

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  2
  •   bshields    15 年前

    您应该检查项目的运行时库设置,听起来好像不匹配。在C/C++和GT下的项目设置中;代码生成>运行库,您可以选择:

    • 多线程DLL
    • 多线程调试DLL

    听起来,解决方案中的某些项目可能使用调试版本,而其他项目则使用非调试版本。或者,某些项目可能使用调试版本,而其他项目则使用调试DLL版本。对于给定的解决方案配置,您希望所有项目使用相同的设置。

        2
  •  2
  •   Ofek Shilon    14 年前

    这个问题解决得太晚了-我把它贴在这里,以防有一天它能帮助别人。

    结果是一个错误的预编译头路径:release配置指向默认的debug PCH路径。所以在从debug到release的转换过程中,构建会拖入所有的debug PCH内容——显然包括MFC#pragma(comment“lib..”)的一些调试版本(包括在afx头文件中)。一个干净的构建将正确地重建PCH,但又会重新编译到debug文件夹中,从而在转换回debug构建时产生相同的问题。

        3
  •  0
  •   Yochai Timmer    14 年前

    这意味着其中一个依赖DLL是用不同的 run-time library .

    项目->属性->C/C++ +GT;代码常规->运行库

    检查所有的库,看看它们是以同样的方式编译的。

    warning LNK4098: defaultlib "LIBCD" conflicts with use of other libs