尝试解决链接器警告:默认库'MSVCRT'与使用其他库冲突
Trying to resolve linker warning: defaultlib 'MSVCRT' conflicts with use of other libs
我正在努力解决我的项目中常见的链接器警告,该项目使用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.exe
或cl.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
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 尝试解决链接器警告:默认库'MSVCRT'与使用其他库冲突
- 解决LNK4098:默认库'MSVCRT'冲突 (DCMTK) 和 LNK2038/LNK2005
- LNK4098 - 使用 GLFW 'MSVCRT'冲突
- 链接 : 警告 LNK4098: 默认库 'MSVCRT' 与其他库的使用冲突;使用 /NODEFAULTLIB:Library