【问题标题】:Trying to resolve linker warning: defaultlib 'MSVCRT' conflicts with use of other libs尝试解决链接器警告:defaultlib 'MSVCRT' 与使用其他库冲突
【发布时间】:2013-12-20 22:03:59
【问题描述】:

我正在尝试在我的项目中解决这个常见的链接器警告,该项目使用 Qt 和 Assimp 加载 3D 模型。我正在使用 VS2008,并且还使用 VS2008 编译了 Qt5.1 和 Assimp。我使用了 Boost 的预编译版本(从 boost_1_55_0-msvc-9.0-32.exe 安装)我将 Assimp 设置为为发布 win32 构建。 C++ 代码生成设置为多线程 DLL (/MD) 并在我的项目中使用 assimp.lib,该项目设置为多线程调试 DLL (/MDd)。我不确定哪个库导致了冲突。如果我注释掉加载模型的 cpp 文件中的代码,警告就会消失。

我的库依赖是:

qtmaind.lib Qt5Cored.lib Qt5Guid.lib Qt5Networkd.lib
Qt5Widgetsd.lib Qt5OpenGLd.lib opengl32.lib glu32.lib assimp.lib

http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx

Resolving LNK4098: defaultlib 'MSVCRT' conflicts with

LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library

Creating library c:\Visual Studio 2008\Projects\qtdisplay\Win32\Debug\QuadPlanner.lib and object c:\Visual Studio 2008\Projects\qtdisplay\Win32\Debug\QuadPlanner.exp
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library


1>Linking...
1>Searching libraries
1>    Searching C:\Qt\Qt5.1.1\lib\qtmaind.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Cored.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Guid.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Networkd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Widgetsd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5OpenGLd.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\opengl32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\glu32.lib:
1>    Searching c:\Visual Studio 2008\Projects\qtdisplay\qtdisplay\\..\lib\assimp.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprt.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRT.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\qtmaind.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Cored.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Guid.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Networkd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Widgetsd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5OpenGLd.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\opengl32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\glu32.lib:
1>    Searching c:\Visual Studio 2008\Projects\qtdisplay\qtdisplay\\..\lib\assimp.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprt.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRT.lib:
1>Finished searching libraries
1>   Creating library C:\Visual Studio 2008\Projects\qtdisplay\Win32\Debug\qtdisplay.lib and object C:\Visual Studio 2008\Projects\qtdisplay\Win32\Debug\qtdisplay.exp
1>Searching libraries
1>    Searching C:\Qt\Qt5.1.1\lib\qtmaind.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Cored.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Guid.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Networkd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Widgetsd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5OpenGLd.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\opengl32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\glu32.lib:
1>    Searching c:\Visual Studio 2008\Projects\qtdisplay\qtdisplay\\..\lib\assimp.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprt.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRT.lib:
1>Finished searching libraries
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>Searching libraries
1>    Searching C:\Qt\Qt5.1.1\lib\qtmaind.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Cored.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Guid.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Networkd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Widgetsd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5OpenGLd.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\opengl32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\glu32.lib:
1>    Searching c:\Visual Studio 2008\Projects\qtdisplay\qtdisplay\\..\lib\assimp.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprt.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRT.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\qtmaind.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Cored.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Guid.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Networkd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5Widgetsd.lib:
1>    Searching C:\Qt\Qt5.1.1\lib\Qt5OpenGLd.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\opengl32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\glu32.lib:
1>    Searching c:\Visual Studio 2008\Projects\qtdisplay\qtdisplay\\..\lib\assimp.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>Finished searching libraries
1>Embedding manifest...
1>Build log was saved at "file://C:\Visual Studio 2008\Projects\qtdisplay\Win32\Debug\BuildLog.htm"
1>qtdisplay - 0 error(s), 1 warning(s)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

编辑: 我刚刚使用 debug-noboost-st 构建配置 (/MDd) 构建了 Assimp,它解决了警告(感谢 Laszlo)。我没有意识到调试和发布库只能与它们各自的构建配置一起使用,而不是混合使用。

Mixing debug and release library/binary - bad practice?

为了将来参考,我发现这些线程很有帮助:

从源头构建提升: Boost compiling with MSVC 11 (VS 2012) Trying to build Boost: I cannot get bjam

bjam 工具集=msvc-9.0 variant=release,debug link=static,shared threading=multi install

一位同事提到,如果您将 Visual Studio Service Pack 之前的库与已修补的 Visual Studio 混合使用,也会导致此特定错误。

【问题讨论】:

  • 为什么要混合发布和调试版本?这通常效果不佳。

标签: c++ qt


【解决方案1】:

在您的 .pro 文件中尝试调整 cxx 标志。

QMAKE_CXXFLAGS += -Md # or you could use /Md

http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx

如果您查看编译器输出,您可以看到它何时将该 /Md 放入 mt.execl.exe 命令的使用中。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    您似乎混淆了库的发布和调试版本。

    qtmaind.lib Qt5Cored.lib Qt5Guid.lib Qt5Networkd.lib Qt5Widgetsd.lib Qt5OpenGLd.lib

    这些似乎是在调试模式下构建的,您可以从扩展之前的主库名称后面的“d”市场中看到。

    opengl32.lib glu32.lib assimp.lib

    这些没有那个'd',所以你可以看到它们是在发布模式下构建的。这通常在 Windows 项目中效果不佳。你应该确保你有相同类型的构建。

    现在您已经在发布模式下构建了低级 opengl、glu 和 assimp 库,我建议您以与您的应用程序相同的方式构建 Qt。

    您可以通过在CONFIG 变量中使用release 选项在following way 中实现它:

    release 该项目将以发布模式构建。如果还指定了 debug,则忽略它。

    您也可以通过将下面的行放入您的 qmake 项目文件中来使用本机 Windows。但是,最好使用 qmake CONFIG 变量,因为这是一种更跨平台的解决方案。

    QMAKE_CXXFLAGS += -MD

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2011-03-01
      • 1970-01-01
      • 2014-03-19
      • 2010-11-12
      • 2010-12-22
      • 2016-06-15
      • 1970-01-01
      相关资源
      最近更新 更多