本文主要是介绍warning LNK4098,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
VC6写的static library,在VC6的MFC工程下调用,出现了“warning LNK4098 ”。解决办法:
设置lib工程: Project — Setting — General,将“Microsoft Foundation Classes ”设置为跟MFC工程相同即可,通常为“Use MFC in a shared DLL ”。
参考:
转自: http://blog.csdn.net/dkink/article/details/3978014
作者:DKink|棼紫
2009.03.10
我们在使用一些lib的时候往往会出现如下warning
warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library
这是怎么回事呢?很简单,你所使用的lib文件编译的时候使用的C-runtime lib和你正在所写的程序所使用的不相同或不兼容。
你可以看到一般有6种CRT,一般他们都是互不兼容的,注意不同版本的VC的CRT也有可能是不兼容的。
我写一个简单的程序来再现这种warning。
新建一个 Win32 Static Library 工程,如图:
里面添加一个h文件和一个CPP文件内容如下:
在VC6中项目,DEBUG版本默认Debug Single Threaded版本CRT,release版本默认Single Threaded版本CRT。我们对这个lib工程修改成MutilThreaded版本的CRT,然后编译成lib文件,注意使用Batch Build生成release版本,setting里面release版本的CRT也要设置成MutilThreaded版本的。
然后随意再新建一个Win32 console的工程使用我们刚写好的lib。由于Debug Single Threaded版本CRT和我们刚写lib使用的MutilThreaded版本的CRT的不兼容问题所以产生warning,如下图。
这样大家就明白warning LNK4098产生的原因了吧,解决的方法是调整项目使用的CRT和lib使用的相同或兼容。如果使用的多个lib的CRT互不兼容就麻烦了,如果有源代码的话,我建议用手头的编译器统一为相同的CRT重新编译,这是最安全的办法。当然你选择忽略某个库的方法也可行,但是可能会造成某些不可预料的其他问题。
这篇关于warning LNK4098的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!