用watcom-c编译器交叉编译CL386 V1.0源码。(起始编译另一个编译器)
说起来编译器的生成是一个编译器生成另外一个编译器反复改进和更新得来的。
当跨越一个操作系统时一个可以生成的编译器就会在另外一个系统中难以生成,或者会出现很多BUG了。
其中原因是操作系统的文件名表示,目录表示,时钟表示,这些,以及其它的操作系统规范和硬件结构,存储结构的引响。
还有关于各种CPU的通用指令和特别指令。我的AMD CPU 能编译 C 传统的编译器,是建立在传统指令上的,所以这方面可以忽视。
最主要的就是系统的编译认可和系统的转换。同一个C语言编译系统,在不同的操作系统中它的宏定义和一些特别函数一样在标准头文件和库中有分支。
我用windows 10 + DOSBOX-X的环境编译 CL386 C语言最早的一个版本1.0,只是一个C语言编译器进化的一个实验。就是说可以把原始的C编译器应用到最先进的操作系统windows 10的环境中来。
当然不得不提一下DOSBOX-X,它的环境和以前的DOSBOX系列模拟器的环境不同,最少可以识别32位环境而少错。
我的编译器是基于watcom版权的免费的,也可以说是共享的版权,在DOSBOX常规环境中,用 watcom-c-dos 1.9和 watcom-c-dos 2.0这两个编译器环境是不好安装的。使用DOSBOX-X环境就顺利安装通过了。当然以前的DOSBOX某个版本也可以安装,硬盘中预留,也没太大的问题。
这是官方的打包编译没完全生成好的原因。得到可以顺利安装的版本要有一定的运气。
CL386编译器的源码在watcomc中是可以编译的还有一个另外的编译器是bcc 3.1版本。只有这两种编译器可以生成这个编译器。
CL386是基于DOS环境的,所以可以用DOS下的早期watcomc编译器生成。但是在windows 的 命令窗口下执行,会有一定的难度。
原因是生成的EXE的起动代码的环境配置代码是不一样的。没有其它原因,再就是C编译器对系统的识别。早期的watcomc编译器在DOS中是没有问题 的。
感谢DOSBOX-X,加了很多特点,充实和独立了DOS的模拟环境,字体也变美了。
我们要在CL386的目录下写入两种不同环境的watcomc编译器的执行环境,一个是CMD环境中的启动,一个是DOSBOX-X的启动。当然安装好watcomc后,各个版本的DOSBOX是一样用的,没什么问题。现在的DOSBox ECE r4881也可以试一下。
主文件CL386.C 编译器生成在DOS模拟器中生成是没问题的,还有一些辅助文件的生成都没问题。
有些文件是M68中的,因为是DOS环境,那用于摩托罗拉68K这个处理器的环境文件是生成不了的,因为是交叉,可以生成目标文件。这个注意一下。
DOS模拟器和CMD环境中没有别的冲突,就是<stdio.h>中的一个指针冲突,实际点就是目录名称的结构不同。有这些结构,所以有的文件只能在DOSBOX-X中生成,可以这样说,DOSBOX-X中生成的可以在CMD环境下通用。这一点是十分优秀的。其它的只能在DOS模拟器的环境下使用或者会产生编译器系统识别错误。
还有一个watcomc编译器的内联汇编问题有的编译器的汇编内联是asm{开头,有的是_asm{开头,多了一个“_"短下划线,注意一下。
这个一般性错误是没有安装watcomc 64位版的编译环境产生的,安装64位版本后没有这个问题。可以兼容DOS版。这个watcomc64位编译比较难找。个人认为会有一些杂项问题,不建议使用,复杂的程序纠错很麻烦,所以还是建议使用32位版本的。以后就不知道了,速度很快很好用,因为研究的是DOS程序,
现在发一些图片会很乱。不同的系统的错误不太一样,所以不如身临其境,好好体会。看实际操作环境也是没有用的。一些东西不实操难以理解。
有什么事情问我。我的微信号: Y.Pierre QQ:7535794 欢迎讨论。
下载实验性c编译器源码:https://pan.baidu.com/s/1fagDI1S7W3u7F2mBuw4saA?pwd=5n2t