MS提供的C运行时库实在是多,今天又遇到了一个crtdll.dll竟然也是C运行时库,于是各种查资料,这里整理一下。
参考资料一:C Run-Time Libraries
1、libc(d).lib单线程的静态库,已经不可用了。
2、libcmt(d).lib多线程的静态库,编译选项MT(d),影响预定义_MT(_MT,_DEBUG)。
3、msvcrt(d).lib多线程的动态库,编译选项MD(d),影响预定义_MT,_DLL(_MT,_DLL,_DEBUG)。动态链接库名一般形如msvcr80.dll,其中80代表版本号,不过也看到过msvcrt.dll,估计是历史产物。
4、msvcmrt.lib用于托管代码和本地代码混合使用。
5、msvcurt.lib纯MSIL code编译而成。
6、crtdll.lib支持多线程,并且支持Win32s,动态链接库名为crtdll.dll,估计也是历史产物了。参考资料二:How To Use the C Run-Time
一个模块静态链接C运行时库意味着该C运行时库信息的存储就在这个模块里,这会导致同一进程内的不同模块的C运行时库函数不能相互影响。例如在一个静态链接CRT的DLL中调用_set_se_translator只能捕获该模块产生的异常。