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/O:I/O功能的封装和实现,参见上一节中I/O初始化部分。
l 堆:堆的封装和实现,参见上一节中堆初始化部分。
l 语言实现:语言中一些特殊功能的实现。
l 调试:实现调试功能的代码。
在这些运行库的组成成分中,C语言标准库占据了主要地位并且大有来头。C语言标准库是C语言标准化的基础函数库,我们平时使用的printf、exit等都是标准库中的一部分。标准库定义了C语言中普遍存在的函数集合,我们可以放心地使用标准库中规定的函数而不用担心在将代码移植到别的平台时对应的平台上不提供这个函数。
运行库是平台相关的,因为它与操作系统结合得非常紧密。C语言的运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层,它将不同的操作系统API抽象成相同的库函数。比如我们可以在不同的操作系统平台下使用fread来读取文件,而事实上fread在不同的操作系统平台下的实现是不同的,但作为运行库的使用者我们不需要关心这一点。虽然各个平台下的C语言运行库提供了很多功能,但很多时候它们毕竟有限,比如用户的权限控制、操作系统线程创建等都不是属于标准的C语言运行库。于是我们不得不通过其他的办法,诸如绕过C语言运行库直接调用操作系统API或使用其他的库。Linux和Windows平台下的两个主要C语言运行库分别为glibc(GNU C Library)和MSVCRT(Microsoft Visual C Run-time)。
值得注意的是,像线程操作这样的功能并不是标准的C语言运行库的一部分,但是glibc和MSVCRT都包含了线程操作的库函数。比如glibc有一个可选的pthread库中的pthread_create()函数可以用来创建线程;而MSVCRT中可以使用_beginthread()函数来创建线程。所以glibc和MSVCRT事实上是标准C语言运行库的超集,它们各自对C标准库进行了一些扩展。
从字面上看,运行库是程序在运行时所需要的库文件。通常运行库是以DLL形式提供的。Delphi和C++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.NET和C#)的库。VisualC++、Delphi和C++Builder允许用户选择所编译得到的程序是否依赖于运行库。而VB、FoxPro、PowerBuilder、Lab Windows/CVI和Matlab 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的,个别精简版系统就没有。
玩游戏时提示缺少DirectX,dxdxxx.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)- C的运行库
- C运行时库
- C运行时库
- C运行时库
- C运行时库
- C 运行时库
- C运行库详解
- C/C++运行库
- C运行时库
- C运行库简介
- C运行库概念
- C运行库概念
- C运行时库
- C运行库 二
- C运行库详解
- c运行库简介
- c/c++ 运行库
- C运行库
- OculusRift数据头盔详解
- Eclipse与MyEclipse的联系和区别
- poj 1815 Friendship(最小点割集)
- shell查询执行脚本的路径
- 常用SVN命令总结
- C运行库
- 合并两个排序的链表
- 完全的安卓初学者的NDK开发——几点注意
- java代理(静态代理、动态代理)(JDK和cglib)
- linux下V4L2开发流程
- LCM from 1 to n
- 太假了呀
- Java集合类ArrayList循环中删除特定元素
- Linux Swap交换分区设置