从字面上看,运行库是程序在运行时所需要的库文件。通常运行库是以DLL形式提供的。Delphi和C++ Builder的运行库为.bpl文件,实际还是一个DLL。运行库中一般包括编程时常用的函数,如字符串操作、文件操作、界面等内容。不同的语言所支持的函数通常是不同的,所以使用的库也是完全不同的,这就是为什么有VB运行库、C运行库、Delphi运行库之分的原因。即使都是C++语言,也可能因为提供的函数不同,而使用不同的库。如VC++使用的运行库和C++ Builder就完全不同。
简介
运行库是一个经过封装的程序模块,对外提供接口,只要知道接口参数就可以自由使用。如果不使用运行库,每个程序中都会包含很多重复的代码,而使用运行库,可以大大缩小编译后的程序的大小。但另一方面,由于使用了运行库,所以在分发程序时就必须带有这些库,比较麻烦。如果在操作系统中找不到相应的运行库程序就无法运行。为了解决这个矛盾,Windows总是会带上它自己开发的软件的最新的运行库。像Windows 2000以后的版本都包括Visual Basic 5.0/6.0的库。Internet Explorer总是带有最新的Visual C++6.0的库。Windows XP带有Microsoft .NET 1.0(用于VB. NET和C#)的库。Visual C++、Delphi和C++ Builder允许用户选择所编译得到的程序是否依赖于运行库。而VB、FoxPro、PowerBuilder、LabWindows/CVI和MatlabNGDX就不允许用户进行这种选择,必须依赖于运行库。
常见报错
缺少msvcpxxx.dll或msvcrxxx.dll
这个错误,许多人的解决方法跟上面的方法类似,还是去百度这个缺少的文件,下载到缺少该文件的软件或游戏的目录下。结果当然还是治标不治本,这个软件进去了,别的软件可能还是缺这个文件,或后面数字不同的文件,甚至还会出现更严重的“应用程序无法正常启动(0x……)”错误(这个错误下文会讲)。
这个错误,同样不是因为软件或游戏目录中缺少这个叫”msvcpxxx.dll”的文件(当然有的软件目录底下也会有这个文件),这个错误也是一种运行库缺失错误。缺什么运行库呢?visual C++运行库。相信有聪明的已经从文件名上看得出来这是visual C++运行库的文件了(ms即Microsoft vc即visual C++),解决办法当然还是下载这个visual C++运行库装上。但是visual C++有好多版本,怎么知道缺哪个呢?别急,看缺的文件后面的数字。跟vcp或vcr接着的那两个或三个数字,就表示该文件所对应的vc库的版本。msvcp60.dll,就是vc6.0运行库,msvcp70.dll,就是vc7.0运行库,msvcp80.dll,就是vc8.0运行库,也就是vc2005,msvcp90.dll,就是vc9.0运行库(vc2008),msvcp100.dll就是vc10(vc2010)的,依次类推,msvcp110对应vc2012,msvcp120对应vc2013,msvcp140对应vc2015,为什么没有msvcp130呢?因为msvcp130对应的应该是vc13.0,而西方国家不用13这个数字,版本也都是跳过13,从12直接到14(所以office也没有13)。msvcrxxx.dll也同理。根据这个命名,就可以根据缺失的文件,来推测应该装哪个运行库来解决问题。再一个,vc运行库又分32和64位,这个应当根据系统的位数来装。同样,许多游戏的Redist或CommonRedist里面也有这个vc运行库,文件名为vcredist_x86或vcredist_x64。当然,为了以后更方便运行软件,建议还是把vc从2005到2015全装一遍,这样运行任何软件都不会报msvcp缺少文件了。
这个错误,许多人的解决方法跟上面的方法类似,还是去百度这个缺少的文件,下载到缺少该文件的软件或游戏的目录下。结果当然还是治标不治本,这个软件进去了,别的软件可能还是缺这个文件,或后面数字不同的文件,甚至还会出现更严重的“应用程序无法正常启动(0x……)”错误(这个错误下文会讲)。
这个错误,同样不是因为软件或游戏目录中缺少这个叫”msvcpxxx.dll”的文件(当然有的软件目录底下也会有这个文件),这个错误也是一种运行库缺失错误。缺什么运行库呢?visual C++运行库。相信有聪明的已经从文件名上看得出来这是visual C++运行库的文件了(ms即Microsoft vc即visual C++),解决办法当然还是下载这个visual C++运行库装上。但是visual C++有好多版本,怎么知道缺哪个呢?别急,看缺的文件后面的数字。跟vcp或vcr接着的那两个或三个数字,就表示该文件所对应的vc库的版本。msvcp60.dll,就是vc6.0运行库,msvcp70.dll,就是vc7.0运行库,msvcp80.dll,就是vc8.0运行库,也就是vc2005,msvcp90.dll,就是vc9.0运行库(vc2008),msvcp100.dll就是vc10(vc2010)的,依次类推,msvcp110对应vc2012,msvcp120对应vc2013,msvcp140对应vc2015,为什么没有msvcp130呢?因为msvcp130对应的应该是vc13.0,而西方国家不用13这个数字,版本也都是跳过13,从12直接到14(所以office也没有13)。msvcrxxx.dll也同理。根据这个命名,就可以根据缺失的文件,来推测应该装哪个运行库来解决问题。再一个,vc运行库又分32和64位,这个应当根据系统的位数来装。同样,许多游戏的Redist或CommonRedist里面也有这个vc运行库,文件名为vcredist_x86或vcredist_x64。当然,为了以后更方便运行软件,建议还是把vc从2005到2015全装一遍,这样运行任何软件都不会报msvcp缺少文件了。
应用程序并行配置不正确
这个错误的提示中说了个叫sxstrace.exe的东西,千万别被它误导后满c盘找那个sxstrace,然后发现找到也不会用。实际上,解决这个错误提示,跟sxstrace.exe,没有半毛钱关系,它一般还是个运行库缺失错误。哪个运行库呢?还是缺少vc++运行库,但是具体少的是哪个vc运行库就不好说了,要看软件。比如,QQ现在用的是vc2008运行库,如果没有安装vc2008运行库,打开QQ就会报并行配置不正确。真三国无双6也会报这个错误,但是这东西要的运行库比较特殊,日版vc2005运行库。不光要vc2005运行库,而且得要日本的vc2005运行库,也不知道日本的vc2005是不是比别的vc2005多了什么东西。别的软件或游戏报并行错误就得具体来定了。如果是游戏,把游戏目录下的Redist里的vcredist装上一般就不报错了,如果是软件,就只能去网上搜这个软件需要的运行库到底是哪个版本,再装该版本的运行库。不过解决这个错误,最好的办法还是上面那种,把vcredist从2005装到2015,vc运行库全了就很少再有这种错误了。如果已经安装过了vc2005至2015的运行库,还是报这个并行错误,而且通过查资料这软件不需要什么特殊版本vc库的话,就只能考虑别的原因了,比如网上说的什么Windows Moudles Installer服务,这就不属于运行库缺失错误的范围了,这里不再讲述。
无法定位输入点
还有的时候,打开程序会报无法定位程序输入点,后面可能是一个单词或一行鸟语,最后是于某某文件上。这种错误,通常是由最后的那个文件引起的错误,说到底就是这个文件虽然名字一样,但是版本不是该软件需要的那个版本。比如,无法定位输入点(……)于msvcp80.dll上,就是说,机器虽然有个msvcp80.dll,但是dll里面的具体版本与程序所需的版本不一致。为什么这样呢?因为同是一个版本的vc库,还要分许多种小版本号,具体就是sp1之类的。比如一个软件要求vc2008 sp1运行库,结果电脑上的运行库是不带sp的vc2008,此时,电脑上虽然也有vc2008的msvcp90.dll,但是这个msvcp90.dll的内部版本号和vc2008 sp1的msvcp90的内部版本不一样,结果就可能报输入点错误或是下面要讲的应用程序无法正常启动错误。这就是上面所说的,为什么有的时候,遇到缺少msvcp110时,在网上下载的msvcp110放进目录,不光没解决错误,还提示了更严重的应用程序错误,正因为网上下载的msvcp110文件内部版本号不一致。举个实际的例子,PS3那个开发了许多年但还是不能玩什么游戏的pc模拟器rpcs3,如果没装运行库,打开时就会提示缺少msvcp120.dll,这时根据前面可以查到,这个软件需要vc2013运行库。百度了个vc2013装上了,再打开rpcs3.exe,却又提示无法定位程序输入点fegetround于动态链接库msvcp120.dll上。咋回事?再次打开那个vc2013安装程序,界面上面的描述吸引了眼球“visual c++ 2013 preview”,难道就是这个preview是引起输入点错误的原因?到网上再找vc2013,原来vc2013有两个版本,一个是早先发行的preview,一个是正式版本,下了个正式版的vc2013装上,打开rpcs3.exe,看到了熟悉的界面。
应用程序无法正常启动/应用程序初始化失败
这种错误就比较复杂了,但是许多时候,原因还是出在运行库上。可能是电脑缺少某个版本的vc运行库或DirectX Redist,也可能是上面说的运行库内部版本不正确,甚至是缺少.net framework运行库(安装程序DotNetFX打头),但是缺少.net运行库的情况比较少,且大都出现在windows7以前的系统上,因为windows8以后,系统都自带了.net运行库4.0版本或4.5版本,不会再因为缺少.net4.0或4.5而报错,即使应用需要的是3.5以前的.net库,打开时也不会弹错误,而是提示让安装.net framework 3.5(包括2.0和3.0),这时候只要有网络,按下下一步,windows会自动下载.net运行库并安装。如果是windows7以前的系统收到上述错误,可以尝试安装DotNetFX打头的程序来排除net运行库的原因。如果是windows8以上,这种错误就不用再考虑net运行库的原因了。当然,.net还有更高的4.6版本,这个版本需要手动安装,不过,需要4.6运行库的软件实在太少了,至少我还没见过,我想也就是用Visual Studio 2015搞编程的人才可能用得到吧。
其它运行库的缺失
除了上述主要的运行库,还有一些不大常用的运行库,比如Microsoft XNA Framework,Microsoft Sync Framework,OpenAL这些,缺少的话也会导致少部分软件不能正常运行。还有一些可以被比作“运行库”的软件,因为缺少这些软件也会像缺少某个运行库一样,导致一些程序不能运行。比如Rockstar Games的Social Club,不装这个的话GTA5玩不了,还有Ubisoft Game Launcher,没有它的话Ubisoft的正版游戏不能玩,还有Steam,Origin,GFWL,对一些正版游戏来说勉强算个“运行库”吧。
注意事项
遇到运行报错不要慌,更不要信网上那些“内存没插好”“病毒”甚至“重装系统”“格式化”之类的说法,那些都是一些人人云亦云的,那些原因的可能微乎其微。遇到报错时,应当冷静分析,上网查资料,确定大致是什么原因,如果是运行库缺失造成的,这篇经验会有所帮助,如果是别的原因,网上还有好多的经验可以看。最后祝愿大家运行软件的错误提示越来越少!
© 版权声明
THE END
暂无评论内容