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重新编译,这是最安全的办法。当然你选择忽略某个库的方法也可行,但是可能会造成某些不可预料的其他问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值