Board logo

标题: [转帖] DJGPP--32位的C语言编程环境 [打印本页]

作者: Wengier     时间: 2003-5-5 00:00    标题: [转帖] DJGPP--32位的C语言编程环境

提起DOS下的C语言,大多数朋友都会想到Borland C,可
惜一个大点的游戏涉及到图象声音等等大量的数据。显然在16位实模式下
写程序,便会因为640K的内存限制而碍手碍脚:(而用BC写32位程
序就不那么方便了。有的朋友转到了Windows 95编程,而剩下来
仍奋战在DOS环境下的游戏程序员便开始使用别的为32位保护模式设计
的C语言了。Watcom C 一时间风靡全国。而另一个强大的C系统
DJGPP,却无人问津。云风也曾学习使用过Watcom C,可是一
当试用DJGPP,便彻底删除了硬盘中的Watcom C,现作此小文
以在国内推广此强力工具:)                    
以下文字无意贬低其它C语言系统的强大功能,评论文字仅为云风一人之见
  首先,DJGPP是一个GNU软件,换句话说,你可以得到它整个系
统的源代码,且可以任意修改。正因如此,DJGPP比起其它的商业化C
系统技术的发展要快的多,无数计算机高手不停的在完善它,为它注入新的
活力;而被发现的BUG也能在第一时间被去掉。通过Internet,
你永远可以使用到世界上的最新技术,而且不用为其付费:)      
  我很喜欢DJGPP的32位保护模式引擎CWSDPMI,至少它的
装栽速度比Watcom C常用的DOS/4GW要快的多,体积小的多
如果不使用DPMI,而换用VCPI,甚至连CWSDPMI这个程序都
不需要:)                            
  其次,DJGPP拥有丰富的外围软件,我很满意那个为DJGPP而
编制的集成环境RHIDE。简直棒极了,界面按我熟悉的Borland
C++ 3、1仿制而成,而细微处又增加了许多体贴人心的设计,尤其内
置的Debug,不仅功能超过了Turbo Debug,而且稳定性一
流。这套IDE不仅支持C,而且支持C++,Obj C,Pascal
Asm,Ada等多种语言的GNU版本,使得混合编程易如反掌。   
  而另一个叫作Allegro的游戏开发库简直无所不包,是游戏程序
员的必备。                            
  如果你现在还在使用Borland C写程序,那么转到DJGPP
来是最容易不过了:)还是一样的界面,一样的写你的程序,只是你不必在
考虑什么远指针,近指针;什么64K限制;什么扩展内存,高端内存。就
按你所想去做吧,你会喜欢上这么一个好东东的:)          

--------------------------------------------------------------------------------
你可以在许多FTP站找到DJGPP,比如             
ftp://ftp.cdrom.com/pub/simtelnet/gnu/djgpp/
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/
下能找到DJGPP的最新版。其中文件名为b的是可执行文件,为d的是
各种文档,为s的是源代码:)                   
要让你的DJGPP跑起来,以下文件是必须的:
gcc281b.zip 1.34M Gnu C的编译器
bnu281b.zip 1.90M Djgpp系列必备,链接程序等
djdev202b.zip 1.42M Gnu C的库文件,头文件等
csdpmi4b.zip 41k DPMI支持引擎
关于其它一些包,下面在做一点简单的介绍
rhide14b.zip 1.31M DJGPP的配套集成环境
mak377b.zip 248K Gnu Make 工具
alleg311.zip 1.43M 一个强大的游戏开发库
gpp281b.zip 1.29M Gnu C++的编译器
还有许多软件包,在此不一一叙述了。你可以先下载那个LISTINGS.zip回去慢慢看

作者: Wengier     时间: 2003-5-5 00:00
说明:DJGPP在国外现在相当有名,是DOS下开发保护模式程序的利器。而且当用了RHIDE后,界面则为全图形方式的了,就像Turbo C++那样,真不错!
作者: Dark-Destroy     时间: 2003-5-5 00:00
下載了RHIDE候,不知道如何使用,都是E文看不懂
作者: 红色狂想     时间: 2003-5-5 00:00
全部下载后怎样安装使用呀,能不能请Wengier站长具体介绍一下?
作者: 红色狂想     时间: 2003-5-5 00:00
难道就没人回答我吗?
作者: Wengier     时间: 2003-5-5 00:00
有人回答呀!把RHIDE解压到DJGPP文件夹中,并设置DJDIR和DJGPP环境变量后运行RHIDE.EXE程序即可。
作者: xxlwsj     时间: 2003-5-5 00:00
RHIDE在2000下不行,老是找不到路径保存,而在98和dos下没有问题。
作者: Wengier     时间: 2003-5-5 00:00


  Quote:
以下是引用xxlwsj在2003-5-5 21:48:59的发言:
RHIDE在2000下不行,老是找不到路径保存,而在98和dos下没有问题。

可见这是Win2K的“命令提示符”的BUG。
作者: 红色狂想     时间: 2003-5-6 00:00
Wengier 站长:
    我把顶楼你介绍的哪个下载地址(ftp://ftp.cdrom.com/pub/simtelnet/gnu/djgpp/)内的所有文件下载到本地行吗,里面有没有 RHIDE 这个文件呀,这个 DJGPP 的版本是多少呢?另外,全部下载后,发现里面有好多压缩包文件。请问,需不需要对他们全部进行解压缩处理?
作者: Wengier     时间: 2003-5-6 00:00
里面有这个文件呀,不过要仔细找一下。比如DJGPP本身、BNU工具、RHIDE的可执行程序全下载下来并解压即可。
作者: 红色狂想     时间: 2003-5-6 00:00
下载的速度好慢呀,昨天我就没有等着!怎么那么多文件呀,比原来的多多了,都是 DJGPP 的文件吗?
    另外,这个 DJGPP 的版本是多少呢?
作者: Wengier     时间: 2003-5-6 00:00
全是DJGPP的文件呢,不过只有一个是主程序,其它都是辐助程序,比如GUI界面、编译器、调试器等等。不过若一个辐助程序也没有的话那是几乎什么事都做不了的。
作者: 红色狂想     时间: 2003-5-6 00:00
那他内部的目录层次是不是不能改动呀?
作者: 红色狂想     时间: 2003-5-6 00:00
Wengier 站长快来吧!

我要问的是:那他内部的目录层次是不是不能改动呀?
版本号是多少?
作者: Wengier     时间: 2003-5-6 00:00
目录层次照原来的解压就行了。
作者: 红色狂想     时间: 2003-5-7 00:00
各级目录中有好多压缩包,如果就地解压缩会不会发生文件重名呀?
作者: Wengier     时间: 2003-5-7 00:00
应该不会的。即使有重名的也只是一些标志性的文件,只管替换就可以了。
作者: 红色狂想     时间: 2003-5-7 00:00
请问,你下载使用过上面这个开发系统吗,我这里下载的速度太慢了,只好分时分组下载了!你那里下载的速度如何?

[此贴子已经被作者于2003-5-7 18:38:51编辑过]



作者: 红色狂想     时间: 2003-5-7 00:00
Wengier 站长,快来吧!还有,你能不能告诉我他的版本号呀?
作者: Wengier     时间: 2003-5-7 00:00
那里面有好几种版本号的,去下载任意一个V2的版本就行了。
作者: 红色狂想     时间: 2003-5-8 00:00
请问,里面的几个文件夹v2、v2apps、v2gnu、v2misc、v2tk等都表示什么意思呀,我都把他们下载下来了,行吗?
作者: Wengier     时间: 2003-5-8 00:00
全下载下来当然也可以呀(不过要注意不要下载相同软件的不同版本),不过若作为实际使用的话,下载其中的几个比较主要的就行了。
作者: 红色狂想     时间: 2003-5-8 00:00
请问,你说的“不要下载相同软件的不同版本”具体指的是什么意思呀?
作者: Wengier     时间: 2003-5-8 00:00
就是说,比如同一个程序,里面既有1.10版,又有1.11版,又有1.12版的话,只下载其中一个就行了(当然最好是下载最新的那个呢!),而不要全部下载。
作者: 红色狂想     时间: 2003-5-8 00:00
如果全部下载了,会出现什么情况呀?
作者: 如是大师     时间: 2003-5-8 00:00
我也下了啊。。哪些是主要的???
作者: 红色狂想     时间: 2003-5-8 00:00
Wengier 站长,快来吧,我有一些问题呀!

    请站长仔细阅读如下内容:

    1. 如果全部下载了,会出现什么情况呀?
    2. 里面哪些是主要的文件呢?
    3. 站点里面有几个文件夹v2、v2apps、v2gnu、v2misc、v2tk等都表示什么意思呀?

    我的英文极差,还请站长多介绍一些相关内容,谢谢!
作者: Wengier     时间: 2003-5-8 00:00
全下载的话当然也可以,但会浪费磁盘空间。如果下载版本号不同的相同程序的话,可能会出现覆盖的情况。V2是DJGPP的第二版本,V2APPS是DJGPP的应用程序,以此类推。
作者: 红色狂想     时间: 2003-5-9 00:00
那么,以上那几个文件夹是不是都是独立的呀,即一个文件夹中包含DJGPP的所有文件?
作者: Wengier     时间: 2003-5-9 00:00
不是呀。每个文件夹中都包含一些重要的和非重要的DJGPP相关程序的。
作者: 红色狂想     时间: 2003-5-10 00:00
Wengier 站长,不好意思!你能不能依照先后顺序,再介绍一下上面哪个DJGPP,从下载到安装使用的全部过程呀?
     小弟在这里谢谢了!
作者: Wengier     时间: 2003-5-10 00:00
这个嘛,就真的说来话长了呢。您不妨看看它的说明文件,里面有下载文件的说明的。
作者: 红色狂想     时间: 2003-5-11 00:00
我是害怕看英文的,哪个下载文件中肯定是英文,哎!!!
作者: Wengier     时间: 2003-5-13 00:00
到时候DD会建个DOS的DJGPP专页的,里面肯定是中文的。
作者: zykdos     时间: 2003-8-1 00:00
找不到了,没有该目录了。站长能否自己开辟一个专区下载
作者: lemonhall     时间: 2003-8-1 00:00
我觉得关于各种系统的安装问题,包括使用。都已经讲得很清楚了,
怎么还会有这么多疑问??????????????

=============================================
                                 DJ Delorie
                        

          This is the README.1ST file for DJGPP Version 2.03
             本文件是DJGPP V2.03的README.1ST文件的中文版
(This is the README.1ST file for DJGPP Version 2.03 in Chinese Edition)


              本文件由LEMONHALL于2003年7月翻译并加目录
                 电子邮件是lemonhall@vip.sina.com
                  QQ号是313813. 欢迎来信指正错误。
        Copyright@1989-1999 DJ Delorie All rights reserved
      Chinese (in simplified character only) translation rights
                      arranged with DJ Delorie

                                目录

分发包

开始

    需要下载些什么
    安装
    编译
    开发环境
    调试
    在线文档
    阅读在线文档,使用Info
    与2.00版本的兼容性
    与1.x版本的兼容性

版权


************************************************************************
*  This file contains information on obtaining, installing, and using  *
*  本文件包含怎样获得,安装,使用DJGPP的信息,请先仔细、完整地阅读后   *
*  DJGPP.  Please read it *completely* before asking for help.         *
*  再提出问题。                                                        *
************************************************************************

DJGPP是在MS-DOS下开发32位保护模式软件的无产权环境。DJGPP在万维网的主页
是:
http://www.delorie.com/djgpp/

软件状态和其它的一些信息(在线文档,FAQ,邮件列表)可以通过网页来
查看。关于DJGPP的讨论和一些关于它使用或特征的问题可以通过新闻组来参与
(发到comp.os.msdos.djgpp)还有DJGPP的邮件列表(将邮件发到
)。  同时,请关注位于网站上关于最新的各种各样的
DJGPP的开发包。

关于版本的信息标明在每个压缩包根目录下的*.ver文件中,内容标明在每个
压缩包根目录下的*.mft文件中。

当然,用户还可以在万维网上取得交互的(通常是更好的)关于安装和使用
djgpp的教程:
http://www.delorie.com/djgpp/doc/


分发包
****************

DJGPP分发包包含许多以内容划分的子目录,每个子目录下都有一个用来
描述目录下各个文件的文件叫做00_index.txt

以'b'结尾的压缩包,包含着已经编译好的二进制文件和在线文档。在写这个
说明档的一刻,这些包有:

FAQ        指导你应该阅读哪些其它文档的文件(本身也包括全面的FAQ
           列表)

v2/
unzip32  免费的解压ZIP文件的工具(就像PKUNZIP)
djdev203 DJGPP V2的开发包和运行时需要的动态连接库
djlsr203 DJGPP V2的基本库的源代码
djtst203 DJGPP V2的测试用程序(仅用来测试C函数库)
djcrx203 DJGPP V2的DOS编译器支持文件包
djtzn203 DJGPP V2的时区文件
djtzs203 DJGPP V2的时区源代码
faq*b    全部的FAQ列表(使用各种格式书写,Info, ASCII, HTML...)
faq*s    The Texinfo sources of the FAQ and tools to generate all the
          different formats of the FAQ
frfaq*   法语的DJGPP FAQ

v2apps/
(各种协同或为DJGPP工作的程序的集合,像RHIDE,TeX)

v2gnu/
(与多种FSF/GNU程序工作的接口,如gcc和binutils)

v2tk/
(各种开发工具,开发库,如Allegro和libsocket)

v2misc/
csdpmi* CWSDPMI, Charles Sandmann的免费DPMI服务程序和说明文件
mlp*    ML的可执行文件打包器
pmode*  PMODE stub for djgpp V2
wmemu*  WM的可选的387仿真器
(还有很多为DJGPP准备杂项工具)


开始
***************

下面的信息是针对最小需求用户,介绍怎样快速上手。当然,对于一个新用户,
我们希望并鼓励您通过积极地阅读FAQ列表来得到更多的详细信息。


需要下载的文件
----------------

到http://www.delorie.com/djgpp/zip-picker.html可以看到一个基于表单
的说明,其中详细列出了你需要下载的分发包。通常情况下,用户并不需要
源文件,所以如果只是使用DJGPP那么只下载二进制包就足够了。

编译C程序,需要下载djdev203.zip, gcc*b.zip,和bnu*b.zip 。如要使用
C++则还需要下载gpp*b.zip

如果需要查找在线手册,则需要下载txi*b.zip,并且运行工具"info"。如果你使用
的是纯16位DOS则需要安装DPMI服务程序,安装包是csdpmi*b.zip(Windows
,QDPMI,386Max, NWDOS, OpenDOS, OS/2, Win/NT 和 Linux下的 DOSEmu已经提供了
良好的DPMI服务, 所以在这些环境下安装并运行DJGPP并不需要CWSDPMI)详细
信息可以查阅FAQ列表的第四章(下载faq*b.zip,且要保证是完整FAQ列表)
--"Where and What to Downlaod(在哪里并下载些什么)"

如果你使用Windows ME, 2000或者 XP,在2001年11月前的镜像文件很可能不能
正常工作,所以如果你使用以上的操作系统来运行DJGPP,那么确保你下载的是
最新的分发包。


安装
------------

1. 创建一个DJGPP的工作目录,比如说C:\DJGPP. (警告:不要将DJGPP安装到诸如
   C:\DEV, D:\DEV这样的目录或子目录下:那将导致它不能工作。详细原因见FAQ
   列表 )不要在使用长目录名,或者任何特殊字符,如空格等。

   如果你曾安装过1.x版本,最好是放弃使用它,或干脆删除掉它们。当然你也
   可以仅仅把它们移动到其它目录下,但是确保移动的目标目录不在你的PATH
   环境变量里出现。(据调查,某些BUG报告是因为混用两个版本的DJGPP造成
   的,事实上1.x版本中唯一可以保留的文件只有'go32.exe')

   如果你使用Windows NT 4.0来运行DJGPP,在安装前,你需要决定你是否想使用
   长文件名还是仅仅使用DOS 8.3的文件名格式。如果需要长文件名支持,你需要
   在解压DJGPP分发包前,下载并安装TSR驱动程序包(ntlfn*b.zip)。
   (译者注:建议不要使用WinNT 4.0来运行DJGPP)

2. 解开所有的压缩包,同时保留目录结构。例如:

pkunzip -d djdev203
   或
unzip32 djdev203

   在Windows 9x, Windows/ME, Windows 2000 和 Windows XP下,使用支持长文件
   名的解压工具unzip。最新的InfoZip的UnZip, PKUnzip和WinZip都能支持长文件
   名。DJGPP站点上的解压工具unzip32.exe同样可以很好地支持长文件名。一个确保
   你正确地解压出长文件名文件的方法是,查看include/sys/sysmacros.h:如果你
   只看到sysmacro.h那么你的解压工具并不支持长文件名,这时你需要另找一个真正
   支持它的解压工具。

   你必须在解压时确保,正确地保留了目录结构。  如果你使用的是WinZip,检查
   复选框"Use folder names".  如果你使用pkunzip,确信你使用了-d参数开关。

   在Windows/NT(NT version 4或者更低的版本,不是WIN2000)下,如果不加挂
   TSR的长文件名驱动程序LFN,则unzip并不会正确地解压出长文件名文件,同时
   DJGPP也不能访问长文件名的文件。所以在这里,我们推荐使用unzip32.exe,
   它将能正确解压。


3. 正确解压完成后,设置环境变量指向在DJGPP安装目录下的文件DJGPP.ENV
   并将DJGPP的BIN目录加入PATH环境变量队列中去。

   确切的设置环境变量的方法取决于你使用的操作系统:

   * 对于 Windows 98 系统:

     - 单击 开始;
     - 选择 程序->设置->系统工具->系统信息;
     - 单击菜单栏上的  工具, 并选择 "系统配置";
     - 按照如下所说的编辑 AUTOEXEC.BAT

   * 对于 Windows ME 系统:

     - 单击 开始, 选择  运行, 输入  msconfig.exe;单击 确定
     - 单击  "环境" 分页;
     - 编辑 PATH 系统变量将DJGPP 的bin子目录加入;
     - 加入一个新变量DJGPP,并将它的值设置为DJGPP.ENV的全路径名。
       (下面还有更详细的介绍)

   * 对于 Windows NT 系统:

     - 右键单击 "我的电脑", 选择 "属性";
     - 单击  环境  分页;
     - 编辑 PATH 系统变量将DJGPP 的bin子目录加入;
       (如果你不是管理员〈administrator〉,将bin目录加入当前用户的PATH
       变量中)
     - 加入一个新变量DJGPP,并将它的值设置为DJGPP.ENV的全路径名。
       (下面还有更详细的介绍)

   * 对于 Windows 2000 或 Windows XP 系统:

     - 右键单击 "我的电脑", 选择 "属性";
     - 单击  高级  分页;然后单击  "环境变量"按钮
     - 编辑 PATH 系统变量将DJGPP 的bin子目录加入;
       (如果你不是管理员〈administrator〉,将bin目录加入当前用户的PATH
       变量中)
     - 加入一个新变量DJGPP,并将它的值设置为DJGPP.ENV的全路径名。
       (下面还有更详细的介绍)

   * 对于其它系统(DOS, Windows 3.x 和 Windows 95):使用标准的EDIT程序
     编辑启动盘根目录下的AUTOEXEC.BAT就可以了。

   作为编辑AUTOEXEC或全局变量的替代方案,你可能希望创建一个
   DJGPP的快捷方式。如果这样做的话,需要创建一个批处理文件(*.bat)
   并包含以下介绍的命令行。这种做法适于安装了多个编译系统的计算机。

   无论使用哪种方式,我们都假设你将DJGPP安装至C:\DJGPP目录下,这样
   需要设置的两个环境变量的命令就如下所写:

set DJGPP=C:\DJGPP\DJGPP.ENV
set PATH=C:\DJGPP\BIN;%PATH%

4. 重新启动。  这样可以使两行命令启用(在 Windows NT ,Windows 2000  和
   Windows XP 环境变量即时生效,  所以如果你使用以上系统便无需重启。但是
   还是需要关闭正在运行的DOS窗口,然后再次运行一个新的DOS窗口)

5. 运行程序 go32-v2.exe,不加任何参数:

go32-v2

   它将报告可供DJGPP使用的DPMI内存及虚拟空间(swap)的大小,就像这样:

DPMI memory available: 8020 Kb
DPMI swap space available: 39413 Kb

   确切的数字取决于你安装了多少物理内存,有多少硬盘空间和DPMI服务
   程序的能力。  但是,如果go32-v2报告的两项空间加起来少于4MB,请阅读
   FAQ列表的3.9节。"How to configure your system for DJGPP"(怎样为
   DJGPP配置你的系统)(如果想在已经大于8MB的情况下优化运行
   ,那么你同样也可以参阅这一部分FAQ)


编译
-----------


GCC是可以在DOS命令行下使用的基于命令行的编译器,可以使用如下命令来编译并
连接单个C程序源文件:

gcc myfile.c -o myfile.exe -lm

-lm参数要求编译器连接时使用lib/libm.a库(三角数学函)。(连接要求需要
显式声明。这意味着,如果你需要使用libm.a就必须在编译时,在命令行结尾
加上参数'-lm')

使用以下命令,从而将C或C++源码编译为OBJ文件:

gcc -c -Wall myfile.c  (for C source)
  或
gcc -c -Wall myfile.cc (for C++ source)

这样便编译出文件myfile.o。  参数开关`-Wall'打开了GCC编译器的警告
模式,这些警告信息对于新用户是十分有用的。(GCC也支持其它很多扩展名,
如.cpp。  关于这些可以参阅FAQ的8.4节 "How does GCC  recognize the
source language")

使用如下命令行,将多个目标文件(OBJ)编译成为可执行文件:

gcc -o myprog.exe mymain.o mysub1.o mysub2.o

这样便编译出在DOS下的可执行文件`myprog.exe'

可以像这样连接C++程序:

gxx -o myprog.exe mymain.o mysub1.o mysub2.o

这时,程序会自动搜索C++的库,所以你完全不必像上面一样,担心需要设置
有关 C++ 库的参数。

你也可以将编译和连接这两个步骤一起执行:

gcc -Wall -o myprog.exe mymain.c mysub1.c mysub2.c

更多的关于GCC运行参数的资料,可以参阅在线文档。在阅读前,你必需确认
是否正确地安装了Texinfo在线文档阅读工具。(找到txi*b.zip,并阅读下面
有关在线文档的章节)

安装成功后,可以这样查找有关资料:

info gcc invoking


开发环境 (aka IDE)
---------------------------------

诚然,DJGPP并没有一个自己的集成环境。但这也意味着,你可以自由地
选择任何可以运行DOS程序,查看运行后输出的编辑器来作为IDE。许多
程序员都使用一个基于DOS的GNU Emacs与DJGPP协同工作。(可以在
v2gnu子目录中找到它)Emacs  是一个非常强大的编辑器(比如,它拥有内置
的Info阅读机能,这样你就可以不用退出编辑器去阅读DJGPP的在线文档
),当然其它很多免费的编辑器同样也可以胜任IDE的工作。这些准IDE
(包括Emacs)唯一不能胜任的工作就是,进行全屏幕的调试工作。

一个被称作RHIDE,专属DJGPP的IDE,不久前向所有DJGPP
用户发布了。它具有Turbo C风格的IDE界面,自动缩进,语句着色,高亮
显示语句,自动调用DJGPP编译器,自动生成Makefile,可以方便地阅读在线
文档。而且更激动人心的是,RHIDE还集成了如同GNU Debugger (gdb)一
般强大的高度集成的调试环境。因为RHIDE还是一个新生的软件,现在还
有众多BUG等待调试。所以如果您感兴趣的话,请访问:
    http://www.tu-chemnitz.de/~sho/rho/rhide.html
来获取最新的资料。
(译者注:RIHID已经成为广泛使用的工具包了,建议大家都下载并掌握
它的使用)


调试
---------

如果需要调试程序,你必需在编译时加入参数开关`-g':

gcc -c -Wall -g mymain.c
gcc -c -Wall -g mysub1.c
gcc -c -Wall -g mysub2.c

当然也可以在连接时加入参数`-g':

gcc -g -o myprog.exe mymain.o mysub1.o mysub2.o

(注意:如果使用DJGPP v2.01版本时,并没有任何必要将程序输出成COFF
以便调试程序。(省略文件名中的`.exe'后缀名就可以达到这个目的)  v2.01版
及其之后版本的调试器完全有能力直接读取可执行文件来进行调试,如同调试C
OFF格式文件一样。当然,如果你无法完全明了这是什么意思,也无需担心。)

然后在调试器下运行你的程序:

fsdb myprog.exe

gdb myprog.exe
再或
edebug32 myprog.exe

(如果你希望使用GDB调试程序,那么你需要下载gdb*b.zip)
FSDB有自己的帮助画面,可以按下F1调用帮助。  GDB的帮助文件只能使用
Info来阅读。Edebug32是一个很少使用的集成调试器,运行后按'h'来调用
帮助。


作者: lemonhall     时间: 2003-8-1 00:00
在线文档
------------

大多数的在线文件都是以 GNU 项目工程使用的特殊的超文本格式储存的。每个包
中都有自己的Info格式文档,它们是后缀为 .iNN  的文件,解压至DJGPP的主安装
目录下的子目录info/中。要游览这些文档,需要下载 txi*b.zip,然后运行info.exe
如果你不知道怎样使用 Info,可以阅读下面的章节。


阅读在线文档,使用Info
----------------------------------------------------

下面的说明不能认为是一个使用Info的完整教程,只能作为初步的指导,所以
你需要查阅更多的文档,并留心专门的章节。

要运行Info以阅读在线手册,需要在info命令后加入手册名。例如:

  - 输入 "info libc" 以便阅读有关于 C语言库函数的支持文档;
  - 输入 "info libc alphabetical printf" 以便查阅函数'printf'的说明
  - 输入 "info gcc" 来阅读GCC用户手册(the GNU C compiler);
  - 输入 "info faq" 以查看DJGPP的FAQ列表;
  - 输入 "info make" 以阅读Make 工具的用户手册;
  - 输入 "info" 以便列出 手册的菜单清单.

按'q'退出Info。

一旦成功运行Info,你便可以使用上下键或者PgDn,PgUp来游览文件。

阅读完一屏后,按下‘SPACE’键来翻屏,通过这个功能键便可以游览手册的各
个章节。

菜单项前有标记"* Menu:"。每个以"*"号开头的行都称为菜单项。可以通过将
光标移至星号下并按下回车键来选择一个菜单项。

超文本联接的标记为"* Note"。如果需要参阅一个联接,如上所说。将光标移动
至星号下,并按下回车。如果需要返回,则可以键入小写的'l'键。(Last的意思)

如需要快速查询索引信息,可以键入'i'(意为Index),并随后键入欲查的主题,
最后以回车结尾。你可以只键入部分查找主题,然后按下Tab键来自动补足主题。
(前提是你输入了完整主题的一部分单词)。如果按下Tab键后,系统鸣叫了一声
或者文字开始闪烁,那这就意味着没有和你输入单词匹配的主题。删去你刚才输入
的单词(使用BackSpace键),并尝试键入其它与你欲查找的内容相关的单词。
然后,如果系统成功地补足了你键入的主题,而且碰巧那正是你需要的资料,那么
键入回车来查看。当然,找到你所想要的主题,这需要你多次的尝试,你需要的是,
耐心查找。

比如,你想要查找有关输出的错误信息"ld.exe: cannot open -lstdcxx: No such
file or directory"的确切意思。那么,启动Info系统,键入`i'并输入`c a n TAB'
(没有那些空格)。第一次键入的TAB键,只是将can变成Can,但这说明存在以Can
开头的索引项,于是再次键入TAB键,显示出很多可能的条目。不要激动,在输出的
以Can开头的索引列表中没有一个是你需要的。所以,只有删除单词Can,然后尝试
键入'-lstd'并按Tab补足,现在Info只列出一个条目,恰巧,那正是你所需要的资料
最后,键入回车键,仔细阅读FAQ有关那条错误信息的描述吧。

如果你希望手动查找索引中的项目,那么在最高级菜单项中查找包含有'Index'
字眼的条目,进入其中,然后就可以任意游览所有的索引了。

关于库的参考没有索引,所以只能在函数表中查找,或使用函数的类型来查询有关
内容。例如库函数'mktime'属于时间函数(Time Functions),'random'是属于
"随机数字函数"(Random Number Functions)等等。
(译者注:就是说可以查询Time Functions来查找mktime函数)

在一些情况下,查找索引并不会帮助你找到所需的资料(因为不可能列出所有的问题
)所以键入's'(意味 Search查询),键入你要查询的资料,而后键入回车。Info
将会进行全文搜索,并列出找到的第一个符合项,如要查找下一个匹配的项目可以
再次键入`s'和回车键。系统会再次搜索。

最后,如果你在哪个手册中查找你想要的资料,你可以使用"--apropos"参数开关
强迫Info遍历所有已经安装的手册,为你查找你所需要的资料。例如,你听说DJGPP
程序支持通配符,但是你不知道关于它的描述在哪部手册中。下面的命令便可以命令
Info系统列出在所有手册中有关通配符的章节("wildcards")

info --apropos=wildcard

当然,这会花一些时间,系统将会列出类似如下内容的列表:

    "(kb)Features" -- Wildcards
    "(kb)Changes in 2.01" -- wildcards
    "(djgppfaq)Filename globbing" -- Filename wildcards expansion

引号中的是手册名(括号中)和章节名(如Features),如果要查看列出的章节,
可以键入如下命令:

info --node="(kb)Features"

Info有很多的命令和开关。如果要查看这些,键入"info info",仍需要更多信息
可以键入"info info-standalone"


与2.00版本的兼容性
------------------------

如果你是从V2.00版本升级的,那么便需要完全重新安装所有你需要使用的包。
因为2.01版本及之后版本处理长命令行(和在WIN95下处理长文件名),2.00版与新
版本混合使用会导致很多调试问题。 详情见FAQ列表的16.6节


与V1.x版本的兼容性
-----------------------

任何已编译的V1.x DJGPP可以很好地独立工作。 V1 版本的程序不能运行 V2的
程序(但,V2程序却可以运行V1的程序),所以不要尝试使用V1.x的Make程序
去运行v2.x的编译器。


--- 版权 ---

DJGPP V2 is Copyright (C) 1989-1999 by DJ Delorie.  Some parts of
libc.a are Copyright (C) Regents of the University of California at
Berkeley.

GNU software (gcc, make, libg++, etc) is Copyright by the Free
Software Foundation.

DJGPP V2的版权允许它用做商业用途。  然而,如果你引用了非DJGPP的库文件
(比如 GNU的 libg++)那么,你就需要遵守他们的版权协议。参见FAQ列表的
19章来获取更多的信息。

在新闻组上曾讨论过一段时间,内容是关于部分C函数库的版权问题。要取得
这个版权就不得不提到加州的贝克利分校。这样,即便是在你的编译版本中也
不得不需要版权声明。值得庆兴的是,贝克利的版权在1999年的7月已经到期。
你再也不需要在你的分发包中,在意关于那部分的版权问题了。

在这里,列出这些与贝克利版权有关的函数和文件:

  libc/ansi/time/ctime.c: asctime ctime gmtime localtime mktime
                          tzset   tzsetwall

  libc/compat/stdlib/random.c: initstate random setstate srandom

==============================================================================


Enjoy!


DJ Delorie
dj@delorie.com
http://www.delorie.com/



作者: lemonhall     时间: 2003-8-1 00:00
最需要问的就是红色狂想,我自己按照我翻的文章,认真地从JAPAN的FTP服务器把
安装包下了下来。  认真地测试了我的翻译内容,还特地装了NT4,2000来测试文件
中提到的问题。

可是,你怎么就不认认真真地读读文章呢???  那可是DJGPP的创史者写的README
啊!!!!!他的文章的开头还特地地提到

  This file contains information on obtaining, installing, and using
  DJGPP.  Please read it *completely* before asking for help.

这可不是白写的啊!!!!!!!!看到你提的很多问题,我都快晕过去了,你仔细
地看过这篇README么?

实在不行,还有Wengier啊,就算我翻的地方有不对的地方,你把英文原文给他看,不
就好了?

Wengier更让我郁闷了,回答了问题却引出新的问题,让人更加迷惑。回答问题时不能
以为大家都懂啊!要把所有提问题的人都当作初级用户啊!!!!

还有,Wengier根本没有更新DJGPP的联结。 这真的很难么??SIMNET的哪个联结更是
错误的,只有在它的镜像上才能找到老的DJGPP联结。

=====================================================
作者: lemonhall     时间: 2003-8-1 00:00
最后,补充到,下载目录里的那个说明文件,就是上边我贴出来的内容。
翻译的版权,我问过DJGPP的作者了,中文翻译版权是作者自己的。

文章里面的网址经过测试,其中
关于RIDE的连接
http://www.tu-chemnitz.de/~sho/rho/rhide.html
是错误的。

邮件列表
comp.os.msdos.djgpp
是错误的

以外,其他连接都可用。

作者: lemonhall     时间: 2003-8-1 00:00
因为看了很多不应该有的问题,言语过激。多有冒犯,还请原谅。

最后,是一个真诚的建议。

学习C,不需要在DJGPP下学习。开发工作更不需要在DJGPP下进行。
因为非专业人员,开发DOS的程序,根本不需要突破那640K,因为
往往就用不了超过200K的内存。

除非你开发 图形,声音,游戏,大文本编辑,解码程序时,或者需要
(并且是必须,不得不)引用DJGPP的 库/模版(根本不是C的内容)
[当然,你如果是高手,想开发C++写的东西,那用他也可以,因为他
是GNU项目,最大的好处就是伸缩性]

作者: lemonhall     时间: 2003-8-1 00:00
转贴的文章,写得很好。 作者风云,可谓是DJGPP的忠实用户了。
他使用DJGPP+ALLEGRO开发的驱动底层,简化了DOS下开发游戏
时,调用DIRETX的繁复过程。

虽然,没有下载过这个库。但是,这个应用本身不就说明么DJGPP
的应用范围么???

我在这里,不是反对使用DJGPP,或者学习DJGPP。而是大大的鼓励。
要不然,我也不会辛苦地翻译那些  初级的README文件了。

作为一种选择,使用DJGPP是有代价的。

首先,是资料的匮乏。现在中文资料只有关于ALLEGRO的是中文的,
真正可用的中文资料,是没有的。(不像很多其他DOS下的编译器)

其次,使用CWSDPMI的DPMI服务,是有代价的。DJGPP不是商业包
,CWSDPMI最初也不是专门为DJGPP开发的。它的版本号*******
注意,它的版本号,是小于1的。意味着,它的不稳定性。
(例子也很简单,我请PERL4。036的爱好者测试使用CWSDPMI服务的
PERL编译器,在小内存计算机上,很容易造成系统崩溃,却不像DOS4GW,
它慢,它大,但它的版本号大于1,更稳定一些。)
[关于这点,我保留自己的意见,因为我的测试方法并不科学,只是直观上的
崩溃次数累计]


作者: lemonhall     时间: 2003-8-1 00:00
最后,做一个真诚的提议:

如果对DJGPP真的这么感兴趣的话,开一个项目好么?
先翻译,再写文章(关于使用经验的)

如果单纯地开一个网站,转一堆别人的东西。那并没有
太大的意义。因为DJGPP的发展太快了,很多文章,库
软件,源代码,都不能用了。

DD需要合作的话,说一声。

如果看耐心地看完了我说的这一堆废话,感谢。感谢。
作者: ATLaS     时间: 2003-8-1 00:00
cwsdpmi的版本号小于1??我怎么记得跟着v2.03的是v5?
我认为cwsdpmi更好的原因是它能提供完整的dpmi spec 0.9支持,在protected mode下的编程要比dos4gw简单些,至少中断我可以用完整的irq0~irq15而不用写real mode和protected mode下的两个isr。

djgpp我也是才用不久,之前一直用watcom c,感觉djgpp还是很不错的,它官方主页上的文档是很齐全的,有两个文档必备:user guide和window hlp格式的文档集合。读完了基本上就能搞定绝大多数问题。学习编程,一定要学会读英文文档,不然会非常被动。
作者: lemonhall     时间: 2003-8-2 00:00
2.03是DJGPP的版本号,CWSDPMI对dpmi spec 0.9的支持也并不完全。但我承认,它比
DOS4GW好,因为它在发展。而后者已经没有进一步的发展了。v5可不是主版本号啊!
而且,最让人郁闷的是,CWSDPMI在错误输出上,少得可怜。这和它的小巧也有关系。
作者: lemonhall     时间: 2003-8-2 00:00
现在把GNU项目关于版本编号的规则介绍一下。
PERL,DJGPP,LINUX,等著名的GNU软件都是
按照这种命名规则的(其实PERL是从PERL5以后
真正开始应用GNU命名规则的)

GNU的命名规则是:以所有字母都小写的主名称
作为前缀,后跟一个破折号,再跟一个版本号,
扩展说明,以及其他后缀。

由此可见,DJGPP的命名方法也不是完全GNU化的
存在着2。03这种版本号。(和PERL1。303一样的
命名方法)


作者: lemonhall     时间: 2003-8-2 00:00
忘了一点,你在哪里看到v5的,好象是r5吧???
作者: lemonhall     时间: 2003-8-2 00:00
而且,CWSDPMI最新版本r5已经放弃DPMI 0.9的支持了(对其进行不完全兼容,据说
是对一个SWAP命令的不兼容)而支持最新的DPMI 1.0。它的版本号只是表示发布版本

其中对其主版本号的输出如下
CWSDPMI V0.90+ (r5) Copyright (C) 2000 CW Sandmann ABSOLUTELY NO WARRANTY
这很明确地说明了它的主版本号小于1(它的命名规则和日本人的惯用的规则更相象)

另外,强调声明一下。CWSDPMI的发展历史,它起初不是为DJGPP开发的,但是在R4版本后
的确是为了支持DJGPP而做了优化。当然,这个独立的开发小组还和著名的游戏机模拟器项目
MAME有共同开发,交换资料的活动。

过几天,我会把中文化的关于CWSDPMI的文档,贴出来的。

再问一次,DD需要合作么?
作者: ATLaS     时间: 2003-8-2 00:00
嗯,是release 5,不是v5。

其实dos下的程序我更关心的就是dos extender。dos4gw也不是没有发展了,但免费的就到此为止。djgpp缺省用cwsdpmi,但pmode/dj好像也有些自己的优势:更小,速度更快。只是还找不到完整的对比。
djgpp虽说也是32-bit的开发环境,但我看过它runtime library的源码,i/o部分还是用底层的bios中断做的,也就是说,程序仍然有mode switching。这对有实时性要求的程序来说是无法接受的。我很感兴趣的是:绕过bios直接写纯保护模式下的i/o到底有多难?希望能有人有兴趣探讨一下。
作者: lemonhall     时间: 2003-8-2 00:00
dos4gw绝对在版权上,不能称为免费. 它从来没有免费过.

其实讨论DOS4GW和CWSDPMI,这时对我们来说没有多少
意义.因为现成的,最好的实现还是MS提供的DPMI服务.
我相信,多数人连CWSDPMI的安装包都不下载.

绕过bios直接写纯保护模式下的i/o??????? 你在说什么?
绕过bios还有什么??对,还有直接的机器指令,但80386
处理器本身就是需要一个mode switching才能从real
mode 转到v86模式. 这是从CPU指令上直接决定的,
windows 3.x就是实现的典范.真不明白你想用80386
来作怎样的东西.想写一个实时操作系统???

dos extender??这些技术和实时性本身就是相矛盾的.
CWSDPMI不支持dos extender,说明文件里首先声明了
这一点.

DOS下的实时系统的实现需要的是其他的技术,那需要的
是更深厚的底子.如工业控制软件.

如果是做这类的东西,参照老的计算机教材反而来的更好.
作者: lemonhall     时间: 2003-8-2 00:00
最后,保护模式,我们天天把他挂在嘴边.
有谁能真正完整地解释一下,什么是保护
模式? 保护模式发展的历史么?
作者: ATLaS     时间: 2003-8-2 00:00
保护模式,呵呵,简单的说:不是保护你的程序不被破坏,而是保护系统不被你的程序破坏。真正的32-bit保护模式是在80386以后才实现的。

你没有明白我的意思。bios和dos代码都是real mode下的代码,而dos4gw,cwsdpmi或者其他各种dpmi server都是完全运行在protected mode下的,如果runtime library或者程序中调用了bios或dos中断,dpmi server会把程序从protected mode切换为real mode(好像也有是v86 mode?),但如果程序中没有调用任何real mode下的东西,那就是纯保护模式代码。
在新的操作系统中(比如window nt kernel和linux),系统加载后都会接管所有的bios中断,让系统真正运行在纯保护模式下。当然,我需要的没有那么复杂,只是部分,比如i/o部分有没有可能绕过bios和dos?唯一的困难在于这种实现可能严重依赖于硬件,而我们没有那么大的能力。但简单的像屏幕输出之类的功能,完全可以用直接写buffer的方式来实现,从而避免mode switching,当然可能有些功能难以完整。至于输入部分,我还没有什么概念。
作者: lemonhall     时间: 2003-9-20 00:00
本贴被整理到精华区
作者: cir2633     时间: 2010-1-8 16:05
DJGPP是个什么概念? 是个开发环境还是IDE ?,,,,,,,