您的位置:首页 > 其它

Windows环境下exe、lib、dll文件怎么确定自己选择哪个版本c运行时库的

2015-11-02 09:03 246 查看
Windows环境下,c运行时库mscrt.dll,会有多个版本。

Run-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。

我们一般使用的Run-Time Library是C Run-Time Libraries,当然也有Standard C++ libraries。

C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。

C Run-Time Libraries有静态库版本,也有动态链接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。

运行时库是程序在运行时所需 要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多 线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。

随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使 用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前 的覆盖,用户得不到正确的错误信息。

因此,Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序调用,另一个版本供多线程应用程序调用。多线程运行时库与单线程运行时库有两个重大差别:

(1)类似errno的全局变量,每个线程单独设置一个;

这样从每个线程中可以获取正确的错误信息。

(2)多 线程库中的数据结构以同步机制加以保护。

这样可以避免访问时候的冲突。

Visual C++提供的多线程运行时库又分为静态链接库和动态链接库两类,而每一类运行时库又可再分为debug版和release版,因此Visual C++共提供了6个运行时库

2.C运行时库的作用

C运行时库除了给我们提供必要的库函数调用(如memcpy、printf、malloc等)之外,它提供的另一个最重要的功能是为应用程序添加启动函 数。

C运行时库启动函数的主要功能为进行程序的初始化,对全局变量进行赋初值,加载用户程序的入口函数。

不采用 宽字符集的控制台程序的入口点为mainCRTStartup(void)。下面我们以该函数为例来分析运行时库究竟为我们添加了怎样的入口程序。这个函 数在crt0.c中被定义,下列的代码经过了笔者的整理和简化:

程序运行时,很大一部分时间是在这些运行库里运行。在程序(Release版)被编译时,VC会根据编译选项(单线程、多线程或DLL) 自动将相应的运行时库文件(libc.lib、libcmt.lib或Import library msvcrt.lib)链接进来。

预知后事,且听下回分解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: