如何编译c/c++到ms-dos .com程序
How to compile c/c++ to ms-dos .com programs?
我使用Code::Blocks with GNU GCC Compiler。我的问题是:有没有办法编译c/c++代码ms-dos 16位(。com)可执行格式?
我试图设置构建选项并在网上搜索编译器参数,但我找不到任何东西。
您当然可以将C和/或(一种古老的方言)c++编译为16位的MS-DOS .com文件。使用Code::Blocks的编译器/链接器几乎肯定不能这样做。
特别是,至少据我所知,gcc甚至从未尝试为16位分段内存环境生成代码。至少有一个gcc到DOS扩展程序(DJGPP)的端口,但它生成。exe文件,而不是。com文件,并且它使用专有的DOS扩展程序。它最初使用的是一个旧版本的gcc,但已经更新为一个更新得多的gcc版本。
如果你真的需要生成一个。com文件,有相当多的选择,但所有的编译器都很老了,所以特别是关于c++,他们接受的语言是相当有限的。
针对MS-DOS的工具链。
警告:正如已经指出的,所有这些都是非常旧的。一般来说,他们接受的C语言是相当一致的,但只适用于相当小的程序(在代码和数据大小方面——必要的:.com文件基本上被限制在数据和代码的总和为64kb)。他们所接受的c++与任何接近现代的c++之间的差异要深刻得多(例如,有些根本不支持模板)。这里提到的一致性都是相对于当时的其他编译器的;按照现代标准,它们的一致性都很糟糕。
- 微软:只在相当短的时间内为MS-DOS出售c++编译器——他们进入市场有点晚,而且很早就退出了市场,转而使用只生产32位Windows可执行文件的编译器。
- Borland:微软镜像。更好的一致性,更差的优化,可能是最后一个放弃MS-DOS市场。他们最近的几个MS-DOS编译器甚至支持c++模板(在当时相当新)。Watcom:为数不多的仍然可以免费下载,但没有商业支持的软件之一。当它是新的,它通常被认为是最好的可用的一致性和优化之一。它显然是最近更新的(至少在某种程度上),但我没有使用最近的版本,所以我不能真正评论这些更新。
- Metaware:当时是一个相当昂贵的选择。我从未使用过它,但我非常尊敬的一些人认为它是你能得到的最好的编译器。主要针对嵌入式系统。
- Datalight/Zortech/Symantec/Digital Mars:另一个仍然是官方可用的。有一小群忠实的追随者。我尝试了一段时间,但从来没有找到一个令人信服的理由来更喜欢它。Digital Mars仍然维护着这个编译器,所以它是为数不多的仍然得到相当定期更新的编译器之一。
当时也有相当多的,但这些可能占当时市场的90%以上。
您要找的是exe2bin。这是DOS自带的一个实用程序,用于将。exe格式的目标代码转换为。com格式(代码和数据在一个64K段中)。它随DOS和一些编译器/汇编器而来。
- 如何在MS Visual Studio 2019中运行QT UI
- 在C++中调用 MS SQL 存储过程
- MS Visual Studio 解决方案结合了非托管C++项目和 C# 项目
- MS 本机单元测试 - 断言::线程失败不起作用
- 为什么我不能在同一 MS VS 解决方案中的两个控制台应用中使用C++特征(仅标头库)?
- 使用 MS 绕道挂钩在调用钩子函数时崩溃C++
- Windows Toast 通知不适用于 MS CPP 示例代码
- 无法编译 ms _tzSet() 示例
- 从现有源创建 MS Visual C++ DLL 项目
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- 带有unique_ptr的通用单链表,MS visual studio C++中存在未知错误
- 连接到MS SQL的程序类型超出范围
- cl.exe在哪里?(MS 构建工具 '13)
- 检查MS-DOS(C/C )中的键是否关闭
- CreateFile打开在另一个终端会话中创建的MS-DOS设备
- 在 Windows 中自动将 xlsx 文件转换为多个 (MS-DOS) CSV 文件(每张一张一个)
- 如何在MS DOS而不是Borland上手动编译和运行(通过单个命令)C++程序
- 如何编译c/c++到ms-dos .com程序
- 在没有ms-dos窗口的情况下运行exe
- 在MS-DOS中使用长参数列表(超过128个字符)编译