尝试解决链接器警告:默认库'MSVCRT'与使用其他库冲突

Trying to resolve linker warning: defaultlib 'MSVCRT' conflicts with use of other libs

本文关键字:MSVCRT 冲突 其他 解决 警告 默认 链接      更新时间:2023-10-16

我正在努力解决我的项目中常见的链接器警告,该项目使用Qt和Assimp加载三维模型。我使用的是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

正在解析LNK4098:defaultlib';MSVCRT';与冲突

链接:警告LNK4098:defaultlib';MSVCRT';与使用其他libs相冲突;使用/NODEFAULTLIB:库

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

1>Linking...
1>Searching libraries
1>    Searching C:QtQt5.1.1libqtmaind.lib:
1>    Searching C:QtQt5.1.1libQt5Cored.lib:
1>    Searching C:QtQt5.1.1libQt5Guid.lib:
1>    Searching C:QtQt5.1.1libQt5Networkd.lib:
1>    Searching C:QtQt5.1.1libQt5Widgetsd.lib:
1>    Searching C:QtQt5.1.1libQt5OpenGLd.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libopengl32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libglu32.lib:
1>    Searching c:Visual Studio 2008Projectsqtdisplayqtdisplay\..libassimp.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libkernel32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuser32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libgdi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libwinspool.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libcomdlg32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libadvapi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libshell32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libole32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\liboleaut32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuuid.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbc32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbccp32.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprtd.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRTD.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibOLDNAMES.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprt.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRT.lib:
1>    Searching C:QtQt5.1.1libqtmaind.lib:
1>    Searching C:QtQt5.1.1libQt5Cored.lib:
1>    Searching C:QtQt5.1.1libQt5Guid.lib:
1>    Searching C:QtQt5.1.1libQt5Networkd.lib:
1>    Searching C:QtQt5.1.1libQt5Widgetsd.lib:
1>    Searching C:QtQt5.1.1libQt5OpenGLd.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libopengl32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libglu32.lib:
1>    Searching c:Visual Studio 2008Projectsqtdisplayqtdisplay\..libassimp.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libkernel32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuser32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libgdi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libwinspool.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libcomdlg32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libadvapi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libshell32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libole32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\liboleaut32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuuid.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbc32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbccp32.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprtd.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRTD.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibOLDNAMES.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprt.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRT.lib:
1>Finished searching libraries
1>   Creating library C:Visual Studio 2008ProjectsqtdisplayWin32Debugqtdisplay.lib and object C:Visual Studio 2008ProjectsqtdisplayWin32Debugqtdisplay.exp
1>Searching libraries
1>    Searching C:QtQt5.1.1libqtmaind.lib:
1>    Searching C:QtQt5.1.1libQt5Cored.lib:
1>    Searching C:QtQt5.1.1libQt5Guid.lib:
1>    Searching C:QtQt5.1.1libQt5Networkd.lib:
1>    Searching C:QtQt5.1.1libQt5Widgetsd.lib:
1>    Searching C:QtQt5.1.1libQt5OpenGLd.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libopengl32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libglu32.lib:
1>    Searching c:Visual Studio 2008Projectsqtdisplayqtdisplay\..libassimp.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libkernel32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuser32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libgdi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libwinspool.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libcomdlg32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libadvapi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libshell32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libole32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\liboleaut32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuuid.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbc32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbccp32.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprtd.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRTD.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibOLDNAMES.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprt.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRT.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:QtQt5.1.1libqtmaind.lib:
1>    Searching C:QtQt5.1.1libQt5Cored.lib:
1>    Searching C:QtQt5.1.1libQt5Guid.lib:
1>    Searching C:QtQt5.1.1libQt5Networkd.lib:
1>    Searching C:QtQt5.1.1libQt5Widgetsd.lib:
1>    Searching C:QtQt5.1.1libQt5OpenGLd.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libopengl32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libglu32.lib:
1>    Searching c:Visual Studio 2008Projectsqtdisplayqtdisplay\..libassimp.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libkernel32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuser32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libgdi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libwinspool.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libcomdlg32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libadvapi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libshell32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libole32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\liboleaut32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuuid.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbc32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbccp32.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprtd.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRTD.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibOLDNAMES.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprt.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibMSVCRT.lib:
1>    Searching C:QtQt5.1.1libqtmaind.lib:
1>    Searching C:QtQt5.1.1libQt5Cored.lib:
1>    Searching C:QtQt5.1.1libQt5Guid.lib:
1>    Searching C:QtQt5.1.1libQt5Networkd.lib:
1>    Searching C:QtQt5.1.1libQt5Widgetsd.lib:
1>    Searching C:QtQt5.1.1libQt5OpenGLd.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libopengl32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libglu32.lib:
1>    Searching c:Visual Studio 2008Projectsqtdisplayqtdisplay\..libassimp.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libkernel32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuser32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libgdi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libwinspool.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libcomdlg32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libadvapi32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libshell32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libole32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\liboleaut32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libuuid.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbc32.lib:
1>    Searching C:Program FilesMicrosoft SDKsWindowsv6.0A\libodbccp32.lib:
1>    Searching c:Program Files (x86)Microsoft Visual Studio 9.0VClibmsvcprtd.lib:
1>Finished searching libraries
1>Embedding manifest...
1>Build log was saved at "file://C:Visual Studio 2008ProjectsqtdisplayWin32DebugBuildLog.htm"
1>qtdisplay - 0 error(s), 1 warning(s)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

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

混合调试和发布库/二进制-不好的做法?

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

来源:使用MSVC 11进行Boost编译(VS 2012)尝试构建Boost:我无法获得bjam

bjam工具集=msvc-9.0变体=发布,调试链接=静态,共享线程=多安装

一位同事提到,如果将visual studio service pack之前的库与修补过的visual studio混合使用,也可能会导致此特定错误。

在.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命令的使用中。

希望能有所帮助。

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

qtmaind.lib Qt5Cored.lib Qt5Guid.lib QT5 Networkd.lib Qt5Widgetsd.lib Qt5OpenGLd.lib

这些似乎是在调试模式下构建的,正如您在扩展之前的主库名称后面的"d"市场上看到的那样。

opengl32.lib glu32.lib assimp.lib

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

既然您已经在发布模式下构建了底层的opengl、glu和assimp库,我建议您在构建应用程序的同时也以同样的方式构建Qt。

通过对CONFIG变量使用release选项,可以通过以下方式实现:

release该项目将以发布模式构建。如果还指定了调试,则会忽略此项。

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

QMAKE_CXFLAGS+=-MD