Visual c++ 链接器警告C++;Visual Studio
我遇到了这个问题,虽然这是一个警告,但我怀疑这是发动机罩下出了问题的迹象。在发布模式下构建时,我收到以下警告: MSVCRT.lib(cinitexe.obj):警告LNK4098:defaultlib'msvctd.lib'与其他lib的使用冲突;使用/NODEFAULTLIB:library 我正在中构建一个动态DLL。在调试模式下执行此操作时,不会出现警告。我在谷歌上搜索了一下,发现Visual c++ 链接器警告C++;Visual Studio,visual-c++,Visual C++,我遇到了这个问题,虽然这是一个警告,但我怀疑这是发动机罩下出了问题的迹象。在发布模式下构建时,我收到以下警告: MSVCRT.lib(cinitexe.obj):警告LNK4098:defaultlib'msvctd.lib'与其他lib的使用冲突;使用/NODEFAULTLIB:library 我正在中构建一个动态DLL。在调试模式下执行此操作时,不会出现警告。我在谷歌上搜索了一下,发现msvcrt和msvcrt都是用于多线程的,一个用于调试,另一个不用于调试。我可以将/NODEFAULTLI
msvcrt
和msvcrt
都是用于多线程的,一个用于调试,另一个不用于调试。我可以将/NODEFAULTLIB
与MSVCRT.lib
结合使用,但我认为避免症状并不能真正解决问题
我真的不知道这是否是个大问题。正确生成DLL和
.lib
文件 > P>这是一个很大的问题,因为它可能导致许多意外的应用程序崩溃,并且不能分发一个链接,该代码链接了代码> MVCRTTD.LIB < />,因为您不允许分发VisualStudio的调试C++运行时。
虽然/NODEFAULTLIB
应该修复这些问题,但您应该修复问题本身
正如卡萨布兰卡所说,msvctd.lib
是在发布模式下链接的,但它应该只在调试模式下链接。
这并不意味着您自己的应用程序具有错误的链接器设置。您在项目中使用的任何库也可能具有不正确的设置
我通常要做的是,打开应用程序链接的所有发行版.lib
文件,使用文本编辑器可以打开如此大的二进制文件(如),然后搜索它们,例如VC80.DebugCRT
(本例中VC80==visualstudio 2005),如果我在其中一个库中找到此字符串,应使用/MD
重新编译该库
如果要链接动态库,可以使用名为.dll
文件的工具,而不是手动搜索.lib
文件。
如果Dependency Walker显示对某个调试crt DLL文件的依赖关系,例如
MSVCP80D.DLL
(注意后面的D),请使用/MD
重新编译该库,问题与您的库有关。
它们的链接方式与您的程序不同
例如,您的程序可能是单线程的,而库可能链接为多线程的
俯视
Project Properties
Configuration Properties
C/C++
Code Generation
Runtime Library
要查看设置(例如“多线程调试DLL(/MDd)”。请检查项目的版本配置中的运行时库设置是否正确。基本上,它应该与调试版本相同,但在描述中没有“Debug”一词。有关此问题的Visual Studio文档如下所示 检查您的设置,如下所示:
- 在解决方案资源管理器中,右键单击项目并选择“属性”
- 确保配置(在属性窗口顶部)处于激活状态(发布)
- 转到配置属性->C/C++->代码生成
- 检查要发布的运行时库是否不是CRT的调试版本
msvcrt.lib
,而不包括msvcrt.lib
。你确定你没有错加什么东西吗?我看你是新来的。如果以下任何答案有助于解决您的问题,请将答案标记为“已接受”。)