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

时间:2015-10-15 15:15:34

标签: c++ c mingw dos

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

2 个答案:

答案 0 :(得分:3)

你当然可以将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:为数不多的still available免费下载,但没有商业支持。当它是新的时,通常被认为是一致性和优化的最佳选择之一。
  4. Metaware:当时相当昂贵的选择。我从来没有使用它,但我尊重的一些人高度认为它是你能得到的最好的编译器。主要针对嵌入式系统。
  5. Datalight / Zortech / Symantec / Digital Mars:另一个still officially available。有一个小但非常忠诚的追随者。我尝试了一段时间,但从来没有找到一个令人信服的理由更喜欢别人。
  6. 当时还有不止一些,但这些可能占当时市场的90%以上。

答案 1 :(得分:-1)

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