澳门新葡亰平台官网古老编程环境展

by admin on 2020年1月23日

    大家知道DJGPP吗?这可是现在国外非常流行的DOS保护模式的编译器呢!现在,新的DOS程序正在不断地被开发出来,那么,它们是用什么编译器来编译的呢?答案是,很多用的是DJGPP,如强大的DOS界面增强软件SEAL,多媒体播放器FreeCDP,都是用DJGPP。那么,什么是DJGPP?DJGPP是DOS下完整的32位的C/C++保护模式的编译器,运行于386以上机器。由于它的十分强大的功能,所以它越来越受到人们的青睐,越来越多的程序员开始用它来编译自己开发的DOS软件。  

澳门新葡亰平台官网 1

前记:
经常浏览博客园的同学应该会觉得本文有标题党之嫌,这个标题的句式来自于MiloYip大牛的大作《C++强大背后》,在此,向Milo兄致意。

    DOS是个16位的操作系统,实模式的DOS最多只能访问1M以下的内存。这样,不是很大的浪费吗?不错。为此,人们设计出的“保护模式接口(DPMI)”,用的是保护模式规范的0.9版本。保护模式的应用程序需要保护模式服务器来运行,而保护模式服务器有很多种,如QDPMI,Windows,DR-DOS中的EMM386等。不过现在一个叫作CWSDPMI的保护模式服务器由于其强大的功能和简便的操作而流行了起来,在国外电脑界有很高的知名度。CWSDPMI的最新版本是r5,于2000年推出,支持DPMI 1.0,并为DJGPP程序进行了优化设计,故人们通常将CWSDPMI和DJGPP程序配套使用。CWSDPMI是免费软件,可以在“DOS软件分类下载”中下载。DJGPP编译器则由于受到普遍的欢迎,因而现在仍在不断地发展着,越来越强大,您可以到它的网站( 

临近暑假,一年一度的小学期、大作业季节,所以最近问TC的,问XXX管理系统的人才特别多吧相信长混CSDN的各位都为批判TC和谭浩强而口干舌燥了,我们来轻松一下吧,TC2.0哪算老,PC上更老的编程环境其实也是能找到的,我有时候就在想,如果谭老的书要求DOS1.0和TurboPascal2.0的话……进入正题,这些虚拟机不是我才做的,寒假在家无事,做了全版本的windows/dos/linux虚拟机,linux发行版太多了,我只做了LFS,从linuxkernel1.2到kernel3.x,100多个内核,二十年跨度的软件包,得改不少东西才能让老内核老软件包完美跑起来跑,个人觉得这样学比看什么鸟哥私房菜有用多了,当然这不是今天的主题了。由于XP的流行和90后的泛滥,在许多人的概念中,XP之前的系统就算是古董了,甚至根本没接触过,但是我这一代人接触计算机大多是2000年左右,win98的时代,所以win98、winme、win2000都尚在我们的记忆中,今天篇幅有限,这几个比较常见的就省略吧我们从WindowsNT4.0开始回溯WindowsNT4.0,1996年发布,算是WindowsNT系列第一个比较成熟,比较普及的版本,具有了现在Windows的大部分特征这是WindowsNT4.0ServerSP6a中文版的登录前界面安装了VisualStudio6.0、VisualAssist6、SQLServer7.0的NT4.0鄙人把VC6列入了古董,不过从1998年的发行时间看,也名副其实NT4.0的API基本上稳定了,现在大部分的windows功能都能提供,而且从软件和驱动兼容性上比win9x都要好,只是娱乐性差些,只支持到DX6,以至于许多媒体播放器装不了,装个opera10.63浏览器,上上网基本没问题。NT4是可以装VS2003的,不过我不想让已具有现代化特征的VS2003背上“古董”这个黑锅。Windows95,1995年发布,Windows经典开始菜单用户界面的开创者,其界面主要特征到Windows7都没有发证颠覆性改变这是Windows95OSR2.1中文版,俗称Win97,加入了USB和FAT32支持,已经比较接近Win98了已安装了VisualBasic5.0、VisualC++4.2和BorlandC++3.1ForWindows。BC3.1是Borland第一个windows下的C/C++开发环境,和TC3.0基本是同时代的,相当于TC3的企业版吧,和现在开发工具企业版、个人版主要差在IDE不一样,BC3.1的编译器明显强过TC3.0,TC3.0几乎就没有优化,BC3.1编译出的16位程序运行效率完全不输给djgpp和openwatcom等“现代化”dos编译器这是watcom11的ide,曾经dos下优化效率最高的C编译器,现在有开源版本openwatcom1.9,我装在了win98上。右面窗口是word97,doc/xls等格式就是从office97开始稳定的,熟悉的大眼夹,这是我用的第一个office版本MS-DOS7.10,Win98的底层,最后一个完整发布的MS-DOS,WinME的DOS8.00并没有单独发布这是我自己用config.sys做的多启动菜单,和Win95装在了一起MS-DOS7.10运行BorlandC++3.1forDOS,最后一个DOS下的BorlandC++IDE,比Windows版稳定,布局基本和TC3.0一样,但编译器不是一个概念,从谭老选择TC而不是BC,就能看出他老人家的书针对的是业余选手而非专业选手这是djgpp的ide——rhide,djgpp是gcc在dos下的移植,能编译32位保护模式dos程序,不能算古董,我装的可是gcc4.6啊WindowsNT3.51,这个可能比较少见,VMware的支持也不太好,我折腾了一番才装上,也是1995年出品,windowsnt系列第一个比较稳定的,有一定实用性的版本,而且之前的WindowsNT3.5、NT3.1压根就装不上虚拟机,不认硬盘。从技术上,NT3.51比Win95先进了一个时代,之所以放win95后面,因为他的界面比较古老,Windows3.x风格的因为和win95基本同期,装的开发工具、office也和win95同版本。虽然nt3.51没有vmwaretools,但在SVGA通用驱动下,显示分辨率还是能调高的Windows3.11forWorkgroups,Windows3.x中带TCP/IP驱动的版本,能上网,不过我找不到一个能在Win3.x下跑的较新的浏览器了,这个版本没有官方中文版,这是当时国内一家公司获得M$授权汉化的,所以中文化很烂,许多东西翻译和其他M$产品不一样,M$的官方中文版——Windows3.2不是工作组版本,没有TCP/IP支持VisualC++1.52——最后一个MSVC的16位版本,Word6.0,PowerPoint4.0MS-DOS6.22,M$发售的DOS的最后一版,我装了作为Windowswfw3.11的底层,不同于Win95之后版本,Win3.x和之前版本都需要另装一个dos,所以这些版本的windows准确的说应该是DOS的外壳这是VisualBasic1.0的DOS版freepascal,这个不能算古董了,但是他可以装在dos下MicrosoftC/C++7.0,需要保护模式,我搞了几种DOS保护模式,就是跑不起来,就不演示了,Win9x虚拟机包括32位XP我都确定是可以用的,有兴趣可以试试,这个版本网上比较好找Windows2.11,呵呵,许多人没见过吧,1989年的古董信不信,这个计算器,你把它复制到32位的win7下,是可以运行的,这就是M$的兼容性,当然得益于Intel更强大的兼容性……MS-DOS5.0,我给Windows2.11装的底层dosMicrosoftC6.0,和MSC7.0一样,当年一直被Borland压制,我还装了QuickBasic7.1,QuickC2.51,用户界面看上去几乎和MSC一样,就不贴了!!注意了注意了,下面就是我们的明星选手——TurboC++3.0,你问我为什么把他和MS-DOS5.0装在一起,我回答,就应该如此,他们是同时代的下面这位是TurboPascal7.0,Borland的最后一版TP,再往后就是Delphi了想看看DOS版的word是什么样么,就这德行……不知道几个人能忍受,但貌似能忍受操作方式差不多的TC的人却很多,我百思不得其解……Windows1.04,恕我水平有限,我没能让他跑起来,可能换个DOS版本或者换个内存管理器就可以,网上有人是把它跑起来的,我就没折腾了。不过有一点我可以保证,Windows1.0的记事本和计算器也是能在32位win7上跑的……MS-DOS4.01,比较失败的一版DOS,BUG多,我安装的时候就感受到了,所以我也没把他当新版本,和MS-DOS3.31装的一样的软件MS-DOS3.31,DOS3.x就是DOS里的XP,DOS4.x生命周期结束的时候,DOS3.x用的人还是比DOS4.x的人多这是MicrosoftC5.10,和TC2同代的产品另一个早期的Basic,QuickBasic4.5而我们的另一个明星产品,TurboC2.01,华丽登场,看看年份,和本座同年,比大部分学他的本科生都要老了吧TurboPascal6.0,不吐槽了DOS的中文化环境,UC-DOS以及曾经国产软件的骄傲,WPSMS-DOS2.11,如果说MS-DOS3.x代表DOS的成熟的话,在之前就是DOS的蒙昧时代了,许多DOS软件,包括WPS的最低版本要求都是DOS3.1或3.3,再往前,连FAT文件系统、MBR分区表的支持都有限,DOS2不支持32MB以上硬盘和磁盘分区TurboC1.5,个人觉得比TC2.0好用TurboPascal4.0,和TC1.5同代的,同代的TC和TP,IDE都很像TP4.0编译的图形示例程序,TC1.5也有,就是用哪个所谓的graphic.h做的MS-DOS1.25,不支持硬盘,也不支持FAT文件系统……TurboPascal2.0,不要认为TC2的界面就很老,80年代中期以前,所谓的DOS交互式程序其实是这样的,TC2的界面已经算是“图形界面”了CSDN的发图真坑爹……

 

 

GCC,全称GNU Compiler
Collection,是一套GNU开发的编译器环境,它的创始人便是大名鼎鼎的Richard.M.Stallman。最初GCC刚开始开发时,它还叫做GNU
C
Compiler,随着开发的深入,GCC很快得到了扩展,不仅可以支持C语言,还可以处理C++,Pascal,Object-C,Java以及Ada等其他语言。目前,GCC不仅是GNU的官方编译器,也成为编译和创建其他操作系统的编译器,包括BSD家族以及MAC
OS
X等。另外,GCC也是跨平台交叉编译的首选,它不仅支持Intel的x86系列,同时也支持MIPS,ARM,PowerPC,SPARC等等处理器。可以这么说,即使GCC不是世界上效率最高的编译器,它也一定是世界上最全面的编译器。

澳门新葡亰平台官网 2

 

1. GCC简介

我们先回到一个常识性的问题,什么是编译器呢?简单地说,编译器可以看作是一个语言翻译器。就像把中文翻译成英语一样,编译器可以把高级语言翻译成计算机能够执行的机器语言。这样看来,GCC可以算得上是一个精通多国语言的高级翻译官了。

最简单的GCC使用指令如下所示:

gcc  hello.c  -o  hello

 

GCC接受hello.c作为输入,最后产生目标可执行代码hello。这个简单的流程实际上经历了很多步骤,如下图所示:

澳门新葡亰平台官网 3

虽然我们只用了一条命令就完成了编译,但实际上gcc命令依次呼叫了cpp,gcc自己,gas以及ld来进行完整的编译流程,最后生成最终的可执行文件hello。

下面我们看一下分解动作:

cpp  hello.c  >  hello.i

gcc  -S  hello.i

as  hello.s  -o  hello.o

ld  -dynamic-linker  /lib/ld-linux.so.2  /usr/lib/crt1.o
 /usr/lib/crti.o  /usr/lib/gcc/i686-linux-gnu/4.4.5/crtbegin.o
-L/usr/lib/gcc/i686-linux-gnu/4.4.5 hello.o  -lgcc  -lgcc_eh  -lc
 /usr/lib/gcc/i686-linux-gnu/4.4.5/crtend.o  /usr/lib/crtn.o  -o
 hello

 

看完这些步骤有没有晕头转向的感觉呢?对于普通的用户来说,还是让GCC帮我们做这些事情比较好。

对于如何学习使用GCC,可以参考GCC官方的手册,如果大家觉得官方的手册太罗嗦,我这里推荐一本GCC的入门书籍《An
Introduction to
GCC》,这本书详尽的介绍了GCC的使用方法,内容浅显易懂,很适合初学者。

 

2. GCC强大的背后

学过编译原理这门课程的同学对下面这副图应该很熟悉,这是经典的编译流程。

澳门新葡亰平台官网 4

GCC作为经典的编译器,自然也是遵循这个教科书流程(实际GCC的处理更复杂点,但本质上是一样的)。我们先简化一下上面这幅图,以中间代码为分界,前面的词法分析、语法分析、语义分析我们把它称之为前端处理,后面的优化和目标代码生成我们称之为后端处理。

试想一下,是否可以为不同的高级语言单独写一个前端,然后为不同的处理器架构单独写一个后端呢?

澳门新葡亰平台官网 5

GCC基本上也是这么实现的,不过不要误会,并没有一个统一的gcc执行程序能够处理如此多的前端和后端,每个语言的编译器都是一个独立的程序(如C语言的编译器是gcc,C++的编译器是g++),而不同的后端也要对应不同的可执行程序。你可以下载单独的一份GCC源代码,通过不同的configure来生成自己需要的编译器。

而且,编译器的实现也比上图要复杂的多,前端的主要功能是产生一个可供后端处理的语法树,而语法树结构实际上很难与处理器架构脱钩,这些都是编译器应用中需要解决的问题。

GCC强大的真正原因是什么?是因为它支持了众多的前端和后端吗?这些都不过是一个表象而已。GCC是一款真正自由的编译器,我们可以随时把代码拿过来修改以实现自己需要的功能。如果你的硬件平台增加了一些指令,而普通的编译器并不能产生这些指令怎么办?在GCC后端添加这些指令吧。如果你觉得C语言用的不太顺手,想给它添加一些功能怎么办?修改GCC的前端吧。因为有了GCC,我们才拥有这些自由,以及迅速实现自己想法的能力,而这些才是GCC强大背后的基础。

2010年1月份的时候,Google的Go语言前端被允许进入GCC编译器家族,GCC更加强大了。

 

3. GCC的多样性

GCC因为其灵活性被应用到了很多领域和系统,从PC上的开发到嵌入式开发,都可以见到GCC的影子。

 

3.1   PC开发

我们先看看PC。MAC自从投入Intel的怀抱,是否也可以看作是一种PC呢?

Linux

Linux系统应该是GCC的主战场,但也是最没必要去说的一个系统,除了GCC,难道我们还有更好的选择吗?Linux内核、Apache服务器、MySQL数据库,等等一系列伟大的作品都是通过GCC来构建的,GCC可以说是GNU/Linux系统的基石。

MAC OS X

MAC OS
X也是GCC的重度用户,其应用程序开发环境Cocoa就是使用的GCC,所以在MAC OS
X下开发也是离不开GCC的。

Windows

现在在Windows下开发C/C++程序一般都是用微软的编译器,当年的Borland已经成为传说。但是如果你不想付钱的话,也可以考虑Windows下的GCC。

在Windows下体验GCC最常用的有两种方式:一是在Cygwin下使用GCC,另外一种是使用MinGW。

Cygwin是一个自由软件的集合,最初由Cygnus
Solutions开发,目的是在Windows系统上运行类Unix的软件。通过Cygwin编译的程序可以在Windows上运行,但必须使用cygwin.dll。

MinGW(Minimalist GNU for
Windows),是将GNU开发工具移植到Windows平台的产物,包括一系列头文件、库和可执行文件,用MinGW开发的程序不需要额外的第三方DLL就可以直接在Windows上运行。Nokia的图形开发包QT在Windows下就是调用MinGW来编译的。

DOS

在DOS系统下也是可以用GCC的,国内的DOS开发者可能更熟悉Turbo C或者Open
Watcom,GCC的DOS版本DJGPP其实也是32位DOS程序开发的主流环境之一。最初DJGPP的发起人DJ
Delorie曾经询问过Richard
Stallman,FSF是否考虑过把GCC移植到MS-DOS下,当时Richard的回答是GCC太庞大,而MS-DOS只不过是个16位的操作系统,所以官方并没有考虑这件事。DJ
Delorie并没有因此而退缩,最终给我们带来了这个优秀的开发平台。DJGPP刚开始开发时叫做djgcc,在引入了C++之后改为现在这个名字(DJ’s
GNU Programming Platform)。

 

3.2   嵌入式开发

对于嵌入式开发领域来说,因为开发板的能力限制,是无法运行编译环境的,这样就需要在PC上通过交叉编译来生成目标可执行程序,GCC的高度灵活性在嵌入式开发上发挥了极大的作用。

Android

看看当今最火的移动平台Android,就是完全用GCC来构建的,请注意,这里指的不是Android应用程序,Android下的应用程序是运行在Dalvik虚拟机上的Java程序。

iOS

Apple的iOS应用程序开发也是用Cocoa来进行,这怎么会离开GCC呢?

MeeGo/Symbian

在Apple和Google的冲击下,Nokia似乎已经日薄西山了,但对于中国国情来说,真的是这样吗?iPhone高高在上,拥有者只会是少数,Google退出中国之后,Android
Market很难在国内有所作为,再加上Nokia手机一贯皮实的口碑,现在的Symbian以及将来的MeeGo的保有量应该不会低。Nokia已经把Symbian和MeeGo的开发环境统一到QT上了,这里依然是GCC的一亩三分田。

 

 

GCC是强大的,但它并不是一个人在战斗,在它的背后站着GNU工具链,包括make,GCC,Binutils,GDB等一系列工具,这些工具之间是相辅相成的,只有把它们组合起来使用才能发挥其最大的威力。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图