背景:
阅读文章

使用Cygwin进行Windows下的 MudOS编译

[日期:2007-05-12] 来源:  作者: [字体: ]

使用 Cygwin 进行 Windows 下的 MudOS 编译
        
          文 / Scatter - 译 / Jjgod

第五次更新于 2002.7:一个用于修正最近版本的 Cygwin 的补丁文件已经被加入。我将在近来更新这个页面以使之适应最新的 Cygwin 和 MudOS。

第三次更新于 2001.6:刚刚更新了这个页面,让它可以用于最近版本的 Cygwin (1.3.2) 和 MudOS (v22.2b11)。 但我并没有照顾其他版本的兼容性问题。你可以在 http://sources.redhat.com/cygwin/ 下载最新版本的 Cygwin 安装包。

下面是用 Cygwin-32 工具套装在 Windows 下编译 MudOS 的一个说明,以及一个包含需要修改的 MudOS 文件的补丁包。

请注意:这篇文章并非教你如何使用或如何配置 MudOS, 它仅仅是让你在 Cygwin 环境下进行编译的一个向导而已。

build.MudOS 脚本作了一点改动,因为 Cygwin 下的 GNU 编译器并没有像默认程序输出那样生成一个 'a.out' 文件,而是生成了一个 'a.exe'。因此,build.MudOS 修改了一下,使它可以检查 CYGWIN 环境变量,看看是否已经使用 'a.exe' 来代替 'a.out' 了。(也就是说,其他的 UNIX 的用户必须确保自己没有一个 CYGWIN 环境变量。)

'arch.h' 文件也被修改使其可以检测到 Cygwin 并设置恰当的宏定义。注意,当它检测到了 Cygwin,就会把 WIN95, WIN32, WINNT 这些东西一古脑儿 undef 掉。否则已经存在的用于移植到 Windows 的代码就会和 Cygwin 冲突。

剩下的一些改动就是 'efuns_port.c', 'socket_ctrl.c', 和 'socket_efuns.c'中的几个条件判断语句,用于处理 Windows 与 Unix 在 TCP/IP 呼叫上的不同。

这样编译出来的 driver,能看起来很稳定地在 Windows 2000 下载入和运行 testsuite 和我自己的 mudlib。 它应该也能在其他版本的 Windows 下工作,不过目前我没什么机会去测试一下。

下面的这个补丁是用 v22.2b11 创建的, 所以可能不会非常平滑地适用于其他版本的MudOS,即便如此,相信你也可以在读过这个补丁,并且对一些文件作点适当的编辑以后,成功的应用它。(记住得用打开 Unix 模式换行支持的编辑器哦。)

* 使用 Cygwin 进行 Windows 下的 MudOS 编译的一点说明

注意:和 Cygwin 的测试版本不同, 最新的版本已经在它安装的目录下创建了它们自己的类 Unix 文件系统,并以这个安装目录作为根目录。 下面给出的路径就是针对 Cygwin 文件系统的,而不是 Windows 的那一套。 Cygwin 会在 /home/ 目录下给你创建一个个人的主目录——拿我来说,就是 /home/dan/。——而你最好就在这个目录下进行工作。

要编译 MudOS,你必须安装一个完整(FULL)的 Cygwin 版本, 而且在安装的时候得选择“以 Unix 模式访问文本文件(access text files in unix mode)”的选项, 而不是 DOS 模式。否则的话,MudOS 将无法进行物件的载入和保存(load/save_objects)。

把这个补丁(http://home.clara.net/stormbringer/...os-cygwin.patch)保存到你的主目录下的一个叫做“mudos-cygwin.patch”的新文件中,把 MudOS tar 包也复制到这个目录下(比如说叫做 beta.tar.gz 的)。

启动 Cygwin bash shell,下面剩下的所有操作必须在 bash shell 中完成。

在 Cygwin 的 bash shell 中,用 'tar -zxvf [filename]' 解开 MudOS 压缩包。不要用 WinZip 之类的 Windows 程序来解压,因为这样它们会把 Unix 换行传换为 DOS 换行——这将会破坏某些 MudOS 的头文件。同时,为了配合你自己的 mudlib,用 options.h 文件创建一个 local_options 文件。

复制这个补丁文件到 MudOS 源代码目录,然后输入以下指令来启用它:

 cp mudos-cygwin v22.2b11/
 cd v22.2b11
 patch < mudos-cygwin.patch

这个补丁将会输出下面的信息:

 patching file `arch.h'
 patching file `build.MudOS'
 patching file `efuns_port.c'
 patching file `socket_ctrl.c'
 patching file `socket_efuns.c'

MudOS 现在已经打上了在 Cygwin 下编译的补丁了。

注意:如果你在使用这个补丁时遇到什么问题的话, 可以下载这个已经打好了补丁的 MudOS v22.2b11(http://home.clara.net/stormbringer/...udos-cygwin.zip),(因为 Web 服务器会把 .tar.gz 以 ASCII 模式传输, 所以这里把 tar.gz 打成了个 Zip 包,把它解压到你的主目录下,像上面已经说过的那样,用 bash 中的 'tar' 指令解压这份代码。)

检查你的环境变量设置。在 bash shell 中,你可以用 'set' 指令列出当前的环境变量(或者用 'set | less' 分页显示),并使用 'export [name]=[value]' 来修改它们,但这仅仅会影响当前的会话而已(也就是说关闭了这个 bash shell 命令行窗口后并不会保存下来)。最简单的永久修改环境变量的方法是,编辑 Cygwin 用于启动 bash 的 .bat 文件 (/cygnus.bat),在那里进行设置。

CYGWIN 环境变量用于检测 Cygwin,但最新版本的 Cygwin 默认并没有设置这个。 所以,下一步就是自己来设置它了,用这个指令:export CYGWIN=binmode。

检查一下 INCLUDE 环境变量的内容(你可以使用 'echo $INCLUDE' 来显示它), 确保没有显示出 DOS 风格的文件名,因为这会打断编译。你可以用 'export INCLUDE='来清除掉这个变量的内容。最后,确保 BISONLIB 环境变量已经设置到包含 bison.simple 和 bison.hairy 的那个目录(通常来说是 '/usr/share',所以这样:'export BISONLIB=/usr/share/' 就可以了)。

从 options.h 创建一个合适的 local_options 文件,如果你没有设好正确的 local_options 就编译 MudOS 的话,恐怕它不会在你的 mudlib 上运行得很好。

现在运行这个指令:sh build.MudOS。它将完成 MudOS 编译的配置工作。 确定它给出的信息没什么明显的错误(例如当前是 DOS 风格文件名的话,它将无法找到 Cygwin-32 这样的东西)。

 ***************** Configuration completed **************
 Installing MudOS on Cygwin-32

 Using install -c to install binaries in ../bin.
 Using gcc -E for preprocessing.
 Using gcc -D__USE_FIXED_PROTOTYPES__      -O2 -fstrength-reduce to compile.
 Using bison -d -y to make the compiler.
 Edit GNUmakefile if this is not what you want

 Otherwise, type 'make' to build MudOS, then 'make install'.

输入 'make' 指令。

MudOS 现在将被编译出来,所花的时间基于你的机器的速度。当完成后,你将获得下面的这些程序:

 driver.exe    - the MudOS driver
 addr_server.exe - the address server
 portmap.exe   - the portmap program

最后,记住在为 MudOS 创建或编辑一个运行时配置文件时, 必须以 Unix 模式的换行来保存,否则 MudOS 将无法启动,而只是告诉你 'bad mudlib directory.' 这个错误信息哦。  
 
尊重作者 转载请注明出处52mud.com

收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容      
内容推送
52mud提供
收听52mud微信公众平台
52mud官方微信公众平台
热门评论