读书笔记_运行库

编译期的检查主要是程序的静态特征,很难发现运行过程中出现的错误。为了发现这类错误,编译器还设计了运行期检查的功能。编译器的运行库(Run-Time Library)是支持运行期检查的载体。

C/C++运行库:

为了增强编程语言的能力,加快软件的开发速度,几乎所有编程语言都定义了相配套的函数库或类库,比如C标准定义的标准C函数,C++标准定义的C++标准类库,这些库被称为支持库(support library)。

当程序使用了一个支持库,那么支持库就是它们运行的必要条件,所以支持库有时也被称为运行库( Run-time Library)。以VC编译器为例,它同时提供了支持C语言的C运行库和支持C++语言的C++标准库。

C语言标准(ANSI/ISO C)定义了一系列常用的函数,称为标准C库函数。C标准定义了C库函数的原型和功能,但没有提供实现,这个任务留给了编译器。每个编译器实现的通常是标准C函数库的一个超集,一般称为C支持库或C运行库(C Run-Time Library),简称CRT。

C支持库包含了从内存分配,错误处理,字符串处理,浮点计算,数据类型转换,文件和输入输出等方面的大量函数,这些函数有些是C标准所定义的标准C函数,有些是针对windows操作系统而特别设计的,并不属于标准C函数。

CRT在VC6的默认目录是c:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\, 对于VC8,其默认位置时c:\Program Files\Microsoft Visual Studio 8\VC\crt\src

C++ 标准库

与C标准类似,C++的国际标准(ISO C++)也是既包含C++语言本身的定义,又规定了C++标准库德内容。C++标准库是为了方便使用C++语言编程而设计的一套函数,常量,类和对象库,包括标准输入输出,字符串,容器(列表,队列,map等),排序和搜索算法,数学运算等。

C++标准库由三大部分组成,第一部分是C标准库,第二部分是IO流(iostream),第三部分是标准模板库(standard template library),即STL。

链接运行库

为了满足不同情况的需要,编译器的运行库通常有多个版本,编译器通常将大多数调试支持只放在调试版本的支持库中。

为了使编译好的程序可以顺利运行,使用运行库德程序在运行时必须可以找到库中的函数,实现这一目的有两种方法,一种是静态链接,另一种是动态链接。

简单来说,静态链接就是将程序所使用的支持库中的函数复制到程序文件中,这样这些支持库函数的实现就位于程序模块中,成为本模块中的代码,所以产生的文件程序会比较大。

动态链接是利用动态链接库技术,在程序运行时再动态地加载包含支持函数的动态链接库(DLL),并更新程序的IAT表,使程序可以顺利地调用DLL中支持的函数。

可以通过编译器选项来设置链接支持库的方式,/MT开关代表静态链接,/MD代表动态链接,/MTd, /MDd表示链接的是debug的库。VC6支持库还配有不带多线程支持的版本,如果要使用这个版本,就必须使用选项/ML或MLd,两者都是静态链接。VC8不再支持单线程版本的支持库和选项,也就是说,VC8只提供了带有多线程支持的支持库。

Lib 文件

无论是静态链接还是动态链接,都离不开lib文件。VC编译器的lib目录(C:\program files\Microsoft Visual Studio 8\ VC\lib\)包含了链接库所需的各种lib文件。

你可能感兴趣的:(读书笔记)