如何将c / c ++编译为ms-dos .com程序?

我使用Code :: Blocks与GNU GCC编译器。 我的问题是:有没有办法将c / c ++代码编译成ms-dos 16bit(.com)可执行格式?
我试图设置构建选项并在网上搜索编译器参数,但我找不到任何东西。

您当然可以将C和/或(一种古老的方言)C ++编译为16位MS-DOS .com文件。 你有Code :: Blocks的编译器/链接器几乎肯定不能这样做。

特别是,至少据我所知,gcc从未试图为16位分段存储器环境生成代码。 至少有一个gcc端口到DOS扩展器( DJGPP ,但它产生.exe文件,而不是.com,它使用专有的DOS扩展器和古老版本的gcc)。

如果你真的需要生成一个.com文件,那么有很多选项,但所有编译器都很老,所以特别是对于C ++而言,他们接受的语言非常有限。

目标(ed)MS-DOS的工具链。

警告:如前所述,所有这些都非常古老。 一般来说,他们接受的C是合理符合的C89,但仅适用于相当小的程序(在代码和数据大小方面 – 必要性:.com文件基本上限于总共64K字节的数据和代码)。 他们接受的C ++与现代甚至接近现代的C ++之间的差异要大得多(例如,有些人根本不支持模板)。 这里所有提及的一致性都与当时的其他编译器有关; 按照现代标准,它们的一致性是非常可怕的。

  1. 微软:在相当短的时间内只售出了MS-DOS的C ++编译器 – 它们进入市场的时间稍晚,并且转移到了很早就生成32位Windows可执行文件的编译器。 更多的是优化而不是语言一致性。
  2. Borland:微软的镜像。 更好的一致性,更差的优化,可能是最后放弃MS-DOS市场。 他们最后几个MS-DOS编译器甚至支持C ++模板(当时还很新)。
  3. Watcom:少数仍然可以免费下载的产品之一,但没有商业支持。 当它是新的时,通常被认为是一致性和优化的最佳选择之一。
  4. Metaware:当时相当昂贵的选择。 我从来没有使用它,但我尊重的一些人高度认为它是你能得到的最好的编译器。 主要针对嵌入式系统。
  5. Datalight / Zortech /赛门铁克/数字火星:另一个仍然正式上市 。 有一个小但非常忠诚的追随者。 我尝试了一段时间,但从来没有找到一个令人信服的理由偏爱其他人。

当时还有不止一些,但这些可能占当时市场的90%以上。

您正在寻找的是exe2bin。 这是DOS附带的实用程序,用于将.EXE格式的目标代码转换为.COM格式(一个64K段中的代码和数据)。 它带有DOS和一些编译器/汇编器。