DJGPP(DJ's GNU Programming
Platform)是一个由DJ Delorie于1989年开始的项目,为
英特尔 80386及以上级别的IBM PC兼容机提供支持DOS操作系统的软件开发套件。DJGPP是GNU编译器集合(GCC)的一个移植版本,可以用来在DOS操作系统下编译生成32位保护模式的程序,主要是将GNU实用程序,如Bash、find、tar、ls、GAWK、sed和ld移植到DOS保护模式接口(DPMI)。支持的
编程语言包括C、
C++、
Objective-C/C++、Ada、
Fortran和Pascal。DJGPP生成的编译器可以在32位保护模式下生成32位代码,并在32位保护模式下本机运行,同时切换回16位DOS调用以获得基本操作系统支持。与Open Watcom C/C++编译器不同,DJGPP并非从零开始的平面模型,因为它更喜欢使用NULL指针保护以获得更好的稳定性。目前,DJGPP基于COFF格式的变体。当使用合适的DPMI主机(如CWSDPMI r7或HDPMI32)时,它可以在纯DOS中访问高达4 GB的RAM。
DJGPP的发起人是DJ Delorie,它是开源的,任何人都可以改进它,为它的发展作贡献。大家就可以用它来编写新的
dos软件来使DOS更加强大。
当程序由DJGPP编译,并使用DJGPP的开发工具时,表面看起来象普通的DOS程序。它依赖于
MS-DOS和BIOS实现文件I/O和其它基本功能例如键盘输入,屏幕感应等。DJGPP适应的环境有:MS-DOS,Caldera's DR-DOS,FreeDOS,Windows 9x,NT,XP,OS/2,Linux DOSEmu.当DJGPP在Windows xp和Caldera's DR-DOS中运行时,它支持长文件名。
截至2020年8月,DJGPP 2的主要组件包括GNU编译器集合9.3.0(也可使用10.2.0)、Autoconf 2.5.9、Automake 1.9.4、Binutils 2.34、GNU Bash 4.1.17、GNU Bison 2.4.1,Flex 2.5.4、GNU Emacs 24.5、GNU MPC 1.1.0,MPFR 4.1.0等。DJGPP提供给程序员一个与ANSI C和C99标准、DOS API以及旧版类POSIX环境兼容的接口。编译后的二进制文件支持长文件名(LFN),并且默认情况下可以在大多数32位Windows系统下处理这些文件名,但它们无法使用Windows图形程序所需的Win16或
win32 API。支持在纯DOS或Windows NT 4下使用LFN的terminate-and-stay-resident(TSR)程序也是可用的。
尽管DJGPP在32位保护模式下运行,但其存根和库大量依赖于许多16位DOS和BIOS调用。由于x86-64版本的Windows不支持16位程序,因此没有NTVDM,也无法运行DJGPP应用程序。在x86-64系统下,这些应用程序只能通过仿真(例如
DOSBox)、x86虚拟化(例如
VirtualBox)或类似方法(例如
Linux的DOSEMU)来运行。这个问题的根源在于长模式下的x86-64处理器不支持IA-32处理器中用于运行16位代码的虚拟8086模式。新的支持VT-x的x86处理器可以支持分页的实模式和无限制的客户模式执行。
在DOS或WINDOWS环境中学习使用LINUX/
unix编程。
为UNIX和MS-DOS/MS-WINDOWS建立通用
开发环境。
DJGPP还可以用于编译移植到MS-DOS中的C,C++之外其它语言,包括后端语言ADA,PASCAL和
Fortran(可用于编写
并行计算程序)。GNU Pascal(gpc) 和GNU Fortran (g77)都可包含于DJGPP软件包中。最新版
GCC还包括前端语言如JAVA和CHILL。