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

来源:互联网 发布:cohen sutherland算法 编辑:程序博客网 时间:2024/05/16 15:06

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

问题描述:在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、静态链接库需要把所有的资源导入到本工程,而动态链接库只需导入需要的。所以静态链接库占用的内存资源             大,而动态链接库占用的资源少。


0 0
原创粉丝点击