C运行库

来源:互联网 发布:淘宝网书城 编辑:程序博客网 时间:2024/06/18 06:15

任何一个C程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所依赖的函数所构成的函数集合。当然,它还理应包括各种标准库函数的实现。这样的一个代码集合称之为运行库(Runtime Library)。而C语言的运行库,即被称为C运行库(CRT)。

如果拥有Visual Studio,可以在VC/crt/src里找到一份C语言运行库的源代码。然而,由于此源代码过于庞大,仅仅.c文件就有近千个,并且和C++STL代码一起毫无组织地堆放在一起,以至于实际上没有什么仔细阅读的可能性。同样,Linux下的libc源代码读起来也如同啃砖头。

一个C语言运行库大致包含了如下功能:

l          启动与退出:包括入口函数及入口函数所依赖的其他函数等。

l          标准函数:由C语言标准规定的C语言标准库所拥有的函数实现。

l          I/OI/O功能的封装和实现,参见上一节中I/O初始化部分。

l          堆:堆的封装和实现,参见上一节中堆初始化部分。

l          语言实现:语言中一些特殊功能的实现。

l          调试:实现调试功能的代码。

在这些运行库的组成成分中,C语言标准库占据了主要地位并且大有来头。C语言标准库是C语言标准化的基础函数库,我们平时使用的printfexit等都是标准库中的一部分。标准库定义了C语言中普遍存在的函数集合,我们可以放心地使用标准库中规定的函数而不用担心在将代码移植到别的平台时对应的平台上不提供这个函数。

运行库是平台相关的,因为它与操作系统结合得非常紧密。C语言的运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层,它将不同的操作系统API抽象成相同的库函数。比如我们可以在不同的操作系统平台下使用fread来读取文件,而事实上fread在不同的操作系统平台下的实现是不同的,但作为运行库的使用者我们不需要关心这一点。虽然各个平台下的C语言运行库提供了很多功能,但很多时候它们毕竟有限,比如用户的权限控制、操作系统线程创建等都不是属于标准的C语言运行库。于是我们不得不通过其他的办法,诸如绕过C语言运行库直接调用操作系统API或使用其他的库。LinuxWindows平台下的两个主要C语言运行库分别为glibcGNU C Library)和MSVCRTMicrosoft Visual C Run-time)

值得注意的是,像线程操作这样的功能并不是标准的C语言运行库的一部分,但是glibcMSVCRT都包含了线程操作的库函数。比如glibc有一个可选的pthread库中的pthread_create()函数可以用来创建线程;而MSVCRT中可以使用_beginthread()函数来创建线程。所以glibcMSVCRT事实上是标准C语言运行库的超集,它们各自对C标准库进行了一些扩展。

从字面上看,运行库是程序在运行时所需要的库文件。通常运行库是以DLL形式提供的。DelphiC++Builder的运行库为.bpl文件,实际还是一个DLL。运行库中一般包括编程时常用的函数,如字符串操作、文件操作、界面等内容。不同的语言所支持的函数通常是不同的,所以使用的库也是完全不同的,这就是为什么有VB运行库、C运行库、Delphi运行库之分的原因。即使都是C++语言,也可能因为提供的函数不同,而使用不同的库。如VC++使用的运行库和C++Builder就完全不同。

运行库是一个经过封装的程序模块,对外提供接口,只要知道接口参数就可以自由使用。如果不使用运行库,每个程序中都会包含很多重复的代码,而使用运行库,可以大大缩小编译后的程序的大小。但另一方面,由于使用了运行库,所以在分发程序时就必须带有这些库,比较麻烦。如果在操作系统中找不到相应的运行库程序就无法运行。为了解决这个矛盾,Windows总是会带上它自己开发的软件的最新的运行库(GNU/Linux总是带上glibc,libc是Linux下的ANSI C函数库,glibc是Linux下的GNU C函数库。通过执行rpm -q glibc 可以查看glibc的版本,通过执行cat /proc/version查看到的gcc版本是指该版本操作系统内核编译使用的gcc版本?)。像Windows2000以后的版本都包括VisualBasic 5.0/6.0的库。InternetExplorer总是带有最新的VisualC++6.0的库。WindowsXP带有Microsoft.NET 1.0(用于VB.NETC#)的库。VisualC++DelphiC++Builder允许用户选择所编译得到的程序是否依赖于运行库。而VBFoxProPowerBuilderLab Windows/CVIMatlab NGDX就不允许用户进行这种选择,必须依赖于运行库。

用精简版系统或者绿色版软件时,使用软件经常遇见的情况是由于应用程序配置不正确,应用程序未能启动,提示缺少dll文件等。大部分电脑新手都以为软件问题,其实不是的,部分软件或者游戏需要依赖运行库才可以运行的。可归纳为:

 

如果出现由于应用程序配置不正确,应用程序未能启动请安装下面的VC++库:

Microsoft Visual C++ 2005

x86版本

x64版本

Microsoft Visual C++ 2005 SP1

x86版本

x64版本

Microsoft Visual C++ 2008

x86版本

x64版本

Microsoft Visual C++ 2008 SP1

x86版本

x64版本

Microsoft Visual C++ 2010

x86版本

x64版本

Microsoft Visual C++ 2010 SP1

x86版本

x64版本

说明:Windows7已经包含MicrosoftVisual C++ 2008

 

 

如果出现不是有效的win32程序错误,请安装下面的.Framework

Microsoft .NET Framework 2.0

x86版本

x64版本

Microsoft .NET Framework 3.5

x86版本

———

Microsoft .NET Framework 3.5 SP1

x86版本

Full Package

Microsoft .NET Framework 4

x86版本

———

Coming Soon

———

———

Coming Soon

———

———

说明:Windows7已经包含Microsoft .NET Framework 3.5 SP1

 

 

如果出现“Windows Installer服务错误,重新安装Windows Installer

Windows Installer 4.5

官方下载

说明:正常情况下是有WindowsInstaller的,个别精简版系统就没有。

 

 

玩游戏时提示缺少DirectXdxdxxx.dll时候,请安装DirectX

DirectX End-User Runtimes

官方下载

说明:DirectX已经包含全系列版本(DX9.0– DX11


运行库列表


常用运行库

VisualBasic 6.0 公共控件

VisualC++ 2003 运行库(VC7)

VisualC++ 2005 运行库(VC8)

VisualC++ 2008 运行库(VC9)

VisualC++ 2010 运行库(VC10)

VisualC++ 2012 运行库(VC11)

MicrosoftCore XML Services 6.0 SP2(MSXML)

Microsoft.NET Framework 3.5 SP1(2.0/3.0)

Microsoft.NET Framework 4.0


游戏运行库

DirectX9.0C (2010.6)

OpenAudio Library 2.07(OpenAL)

NVIDIAPhysX System 9.10.0514

MicrosoftXNA Framework 3.1


其他运行库

Java运行库7 Update1(JRE)

微软 ActiveX公共控件

微软标准C运行库(VC1)

VisualBasic 1 运行库(VB1)

VisualBasic 2 运行库(VB2)

VisualBasic 3 运行库(VB3)

Visual Basic 4 运行库(VB4)
0 0