DJGPP
DJGPP工具包是几个基本GNU实用程序到MS-DOS的端口,使用DJ Delorie创建的32位DPMI系统扩展器。 它包括GCC、binutils和Emacs的版本。 它还包括几个DOS和Windows特定的实用程序。
虽然DJGPP在过去被广泛用于操作系统开发,但它与MS-DOS的紧密联系以及与Windows XP的兼容性问题已导致大多数Windows用户转向Cygwin或MinGW。 DJGPP现在肯定被认为已经过时了。
ELF文件
使用DJGPP生成ELF文件相当简单。 你需要的是一个安装好的DJGPP,你将需要sed,bison,flex,bash等。 您还需要从Windows95/98等中的dosbox执行此操作,以便您可以使用长文件名。
首先,下载最新的binutils。 (我用了 binutils-2.9.1.tar.gz)。 您需要原始(plain)binutils,而不是Linux的binutils,也不是dos的binutils等,而是来自任何GNU存档站点的原始binutils。
下载完binutils后,如果内存不足64mb,请编辑dos box的属性,并手动将65535输入为EMS内存、XMS内存和DPMI内存提供的box中(使用box中的选择器无法输入65535,因此必须手动输入)。
使用DJTARX将binutils解压到根目录(更容易)。
C: CD \ DJTARX \download\binutils-2.9.1.tar.gz
解压后,您将不得不对DJGPP安装进行一些非常小的修改 (没什么大不了的!)
进入DJGPP\bin目录并复制flex.exe lex.exe, bash.exe到sh.exe并在根目录中创建一个名为\bin的新目录,然后将sh.exe复制到\bin\sh.exe
C: CD \ COPY flex.exe lex.exe COPY bash.exe sh.exe MD \bin COPY \djgpp\bin\bash.exe \bin\sh.exe
\bin目录必须与您解压的binutils位于同一驱动器上,该驱动器可以与安装DJGPP的驱动器不同。
现在进入binutils目录 (cd binutils-2.9.1) 并编辑 “configure” 脚本。
在脚本顶部附近有三行文字:
remove hard_link symbolic_link
更改这些行,使其显示为
remove=rm hard_link=cp symbolic_link=cp
保存修改后的配置脚本。
通过键入bash来执行bash shell,提示应该更改为“bash$”。
现在您必须设置bash以使用djgpp,输入以下命令。
export CC="c:/djgpp/bin/gcc.exe" export LD="c:/djgpp/bin/ld.exe" export BISON="c:/djgpp/bin/bison.exe" export YACC="c:/djgpp/bin/bison.exe -y"
现在,您已经准备好构建新的 ELF 工具集了。 首先,您必须使用一些选项运行configure。
你可以选择你想要构建到你的新的binutil集合中的目标,我构建了所有的目标,以防我以后需要elf以外的其他东西(一些用于BSD的a.out格式,等等)。
./configure --enable-targets=all --with-gnu-as --with-gnu-ld --with-stabs
经过一个非常长的过程,如果一切顺利,您将不会发现任何错误,并将返回 “bash $ ” 提示,准备构建您的新实用程序。
现在再做些修补。。。配置进度还没有100%,您必须编辑每个目录中的“libtool”文件:bfd/libtool、as/libtool、gprof/libtool、ld/libtool和opcodes/libtool。 因此,退出bash(“Exit”)并使用编辑器打开这些文件,然后重新保存它们(不做任何修改,只需保存)。 这似乎修复了在libtool中有点破坏的crlf/lf/cr unix/dos机制。
重新输入bash并键入make,它将构建新的UTIL。 如果您已经启用了所有目标,则生成的.exe文件每个大约6到7MB,所以去掉调试信息(strie --strie-all *.exe),然后对它们使用DJP压缩器,每个文件应该大约600到900KB。
或者,如果您不想构建所有目标,则可以在没有 “--enable-targets=all” 选项的情况下运行配置,并替换为 “--targets=i386-unknown-elf”。
GCC本身不输出ELF/[COFF]/[a.out]]文件,GCC输出汇编器,该汇编器被传递给AS,后者将其组装为默认的任何输出格式。
另见
文章
外部链接
- http://www.delorie.com/djgpp/ - DJGPP website