现在的位置: 首页 > 综合 > 正文

勿于浮沙筑高台 去除对微软运行时库(RunTime)依赖

2012年12月14日 ⁄ 综合 ⁄ 共 1415字 ⁄ 字号 评论关闭

    勿于浮沙筑高台,在计算机软件领域,微软技术算是最大的浮沙。十五年前,当我写一个Hello world的程序,我可以拍胸脯说,它绝对可以运行在你的计算机上。到了今天,假如你问我写的Hello World程序可以运行在你的计算机上吗?我会对你说,你最好试一下,如果能够运行,麻烦你告诉我一声。你没听错,是的,我都不知道我写的程序能不能够运行在你的计算机上了,但不管你信不信,它可以运行在我开发所用的计算机上,至于运行在你的计算机上,没准会弹出“应用程序配置不正确...”,没准会弹出"R6034,运行时冲突.."等等,谁知道呢。我们需要的是一个稳定的平台,理想很美好,但现实很骨感,我们的终端用户早已被绑定在一个漂亮的浮沙平台上,所以我们还得继续。本文就先谈一谈去除对微软运行时库的依赖。

    孔乙己调研中国文字后认为,”茴“字有四种写法。微软公司认为,运行时库有无数种写法,如msvcr.dll,msvcr70.dll,msvcr70d.dll,msvcr80.dll,msvcr80d.dll,msvcr90.dll,msvcr90d.dll.....每一个版本又分为原始版,SP1版,SP1+ATL修正等多个子版本,有些版本还包含英文版、中文版,其它语言版等等.为了在插件框架等集成系统中管理好这些库,你最好画一个运行库结构UML图,譬如,运行库管理对象由多个主版本的运行库对象构成,每个主版本的运行库由多个不同配置版本的运行库组成,如调试版、发行版、发行版带调试信息等,每个配置版本的运行库又有多个原始版、SP1版、SP1_1版、SP2等修正配置子版本构成。每个修正配置子版本又由可能的英文版、中文版以及其它地球语言版等构成。由于这些库版本可能名字重复(26个英文字母太少,不足以描叙微软运行库名称),所以每一运行库引入了一个UUID。总之,弄懂这些运行库,可成功地表明一个计算机程序员对复杂问题的控制能力,足够一个计算机专业的硕士、博士作为毕业课题论文的了。

   为了降低插件框架对微软运行库的管理复杂度,我们应尽量使得每一个插件去除对微软运行库的依赖。当你用VS2008新建一个项目时,虽然你从“项目”=>"属性“=>"配置属性"=>"常规“=>"MFC 的使用“中看到的是”使用标准 Windows 库“,但在项目文件"{项目名}.vcproj"中的“RuntimeLibrary“属性值却是"2"或者"3"(观察者模式在微软软件中有时是失效的),解决的办法有两种:

    1、首先更改"MFC 的使用"属性为其他的任意属性值,如"在静态库中使用MFC",重新编译,编译通不过没关系,然后重新改为"使用标准 Windows 库",重新编译即可。注意此方法不太适宜于Chrome等大型项目(需要编译N个小时或者N天)。

   2、使用文本编辑器打开"{项目}.vcproj",搜索所有的RuntimeLibrary="3"或者RuntimeLibrary="2",替换为RuntimeLibrary="1",重新编译即可。

   编译成功后,使用depends.exe查看插件模块,验证是否成功剔除了对微软运行库的依赖(看不到类似于"c:\windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\MSVCP90D.DLL"等)。

抱歉!评论已关闭.