【发布时间】: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
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 混合使用,也会导致此特定错误。
【问题讨论】:
-
为什么要混合发布和调试版本?这通常效果不佳。