warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library

本文记录了在VS2010下编写静态链接库遇到的问题及解决办法,包括警告LNK4098、致命错误LNK1103和未解析外部符号等问题,并探讨了静态链接库与动态链接库的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在编写静态链接库的时候出现的问题。

问题描述:在VS2010下编写动态链接库,在VC6.0编译环境下调用,没有问题。于是乎我就想,既然动态链接库编译可以通过,静态链接库编译也可以通过了,于是我就编写了一个静态链接库,供VC6.0调用。编译过,连接没有过。错误如下:

1、warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library

2、fatal error LNK1103: debugging information corrupt; recompile module Error executing link.exe

3、error LNK2001: unresolved external symbol __RTC_Shutdown

4、error LNK2001: unresolved external symbol __RTC_InitBase

发现这些问题,我就baidu了一把,发现解决问题的方法还不少。先看简单的问题3,4这个主要是编写静态链接库的时候需要在VS2010工程目录下修改设置,

C/C++ -> Code Generation
... and change:
Basic Runtime Checks from "Both (/RTC1, equiv. to /RTCsu)" to "Default".

问题2就比较麻烦:在网上的大多数出现此问题是由于,编译器版本升级,新版SDK的路径换了,解决方法也是修改SDK的路径就可以解决。后来我想想,确实也是这个原因造成的,VS2010使用的SDK版本,与VC6.0使用的SDK版本可定不同,虽然API的名称一样,但是版本不一样导致的。

但是我由此产生了新的疑问,同样是VS2010编写出来的,动态链接库可以供其他编译器调用,而静态链接库就不行呢?这就是静态链接与动态链接的区别了。

静态链接库与动态链接库的区别:

1、静态链接库的调用阶段在链接阶段,而动态链接库的调用阶段是运行阶段。

2、静态链接库需要把所有的资源导入到本工程,而动态链接库只需导入需要的。所以静态链接库占用的内存资源             大,而动态链接库占用的资源少。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值