☰
【mud】Mudos V22pre11在Windows XP下的编译:用TaoToken统一Key打通VC6.0工具链
2026/10/11 9:50:10 网站建设 项目流程

1. 为什么要在 Windows XP 里折腾 Mudos V22pre11 编译

Mudos 是 LPMud 驱动里最经典的一支,V22pre11 这个版本在 2000 年前后非常流行,很多老 MUD 的 lib(比如《侠客行》xkx 系)都是基于它跑的。现在想复现一套能跑的服务端,最省事的路径反而是回到 Windows XP 虚拟机里,用 VC6.0 把源码编出来。原因很直接:这份代码本身就是为那个年代的编译器写的,VC6.0 对 K&R 风格、老式头文件、_beginthread这类 Win32 API 的容忍度最高,换到 VS2019/2022 反而要改一堆东西。

但真正卡人的不是编译本身,而是两件事。第一,老工程的依赖文件(grammar.tab.h、malloc.c相关)在 Windows 下生成不了,得先在 Linux/FreeBSD 里跑一遍 bison 拿到中间产物;第二,编译过程中要反复查资料、对错误、找补丁,如果每个工具都单独配一套授权和 endpoint,光是切换就够烦的。我这次的做法是用 TaoToken 统一 Key 把工具链的模型调用收敛到一个入口,编译排错时直接问,不用在多个平台之间来回倒腾。

这篇面向的是手里有 Mudos V22pre11 源码、想在 XP 虚拟机里把它编成MudOS.exe并跑起来的人。你会看到完整的 VC6.0 工程设置、mudos.mak换行符处理、cc.h/configure.h的补丁内容,以及编译通过后启动服务的验证命令。适合谁:想复现老 MUD 服务端的运维、做逆向或怀旧项目的开发者、以及需要一套可跟做的老工具链编译流程的人。

先说清楚一个前提:Mudos 的编译不是纯 Windows 能完成的。grammar.y需要 bison 生成grammar.tab.c和grammar.tab.h,这一步在 XP 上很难搞。所以流程是「Linux 侧生成中间文件 → 拷回 XP → VC6.0 编译链接」。下面按这个顺序走。

2. TaoToken 统一 Key 的前置准备与 endpoint 配置

在开始编译之前,先把工具链的模型调用统一掉。为什么要先做这一步?因为 Mudos 编译过程中你会遇到大量报错——crc32.h缺UINT32、crypt.h的CONST不兼容、interface变量名和系统头冲突——这些都需要边查边改。如果每个 IDE 插件、每个命令行工具都单独配 Key,切换成本很高。TaoToken 的作用就是给一个统一的 Base URL 和 Key,让 Claude Code、Cline、Codex 这些工具都指向同一个入口。

TaoToken 是一个模型 API 聚合入口,兼容 OpenAI 风格的接口。你拿到一个 Key 之后,可以同时给多个编码工具用,不用分别去各家申请。对这次编译场景来说,最实用的是把它接进命令行工具和编辑器插件,遇到 VC6.0 的报错直接贴进去问。

先拿 Key。打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台里创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 列表在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。创建完复制出来,后面配置要用。

API 的基础地址是https://taotoken.net/api,注意这个不带 UTM 参数,是给程序调用的。模型对话的入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,可以先去那里确认一下你要用的模型 ID 是什么。

如果你打算长期用命令行工具做编译排错,Coding Plan 会更划算,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各工具的详细配置。

这里要强调一点:TaoToken 只是模型调用的入口,它不替代 VC6.0,也不替代编译器。你的编译还是在 XP 虚拟机里用 VC6.0 完成,TaoToken 负责的是排错和查资料这一环。

3. 可复制的配置文件:settings.json / auth.json / config.toml

这一节给出实际能粘贴的配置片段。不同工具用的格式不一样,我按最常见的三种给出来。路径和字段名要和工具本身一致,不要自己改。

3.1 Claude Code 的 settings.json

Claude Code 的配置放在用户目录下的.claude/settings.json。Windows XP 里路径大概是C:\Documents and Settings\你的用户名\.claude\settings.json。内容如下:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }

三个字段缺一不可:Base URL 指向 TaoToken 的 API 入口,AUTH_TOKEN 填你创建的 Key,MODEL 填模型 ID。模型 ID 去模型对话页确认,别照抄我这里的示例。

3.2 Codex 的 auth.json

Codex 用的是auth.json,一般放在~/.codex/auth.json。XP 下就是C:\Documents and Settings\你的用户名\.codex\auth.json:

{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api", "model": "gpt-4o" }

注意 Codex 的字段名是OPENAI_API_KEY和OPENAI_BASE_URL,和 Claude Code 不一样。Base URL 同样不带 UTM。

3.3 Cline / Roo 的 config.toml 或设置项

Cline 这类 VS Code 插件一般是在设置界面里填,但如果你用配置文件,格式类似:

[provider] base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model_id = "claude-sonnet-4-20250514"

如果你用的是 CC Switch 来管理多个配置,那三件套就是:Base URL =https://taotoken.net/api,Key = 你的 TaoToken 密钥,Model ID = 你选的模型。这三个在任何工具里都是核心,缺一个就连不上。

配置完之后,建议先用模型对话页发一条测试消息,确认 Key 是通的,再去配工具。这样能排除掉 Key 本身的问题。

4. VC6.0 编译 Mudos V22pre11 的完整步骤

这一节是主体。我按实际操作顺序写,每一步都给出具体命令和文件内容。

4.1 在 Linux 侧生成中间文件

先在 Linux 或 FreeBSD 里解压源码,进入src目录,执行:

cd mudos_v22pre11/src bison -d grammar.y flex -o grammar.tab.c lex.c

执行完会得到grammar.tab.c和grammar.tab.h。这两个文件是关键,Windows 下生成不了,必须从这里拿。把整个src目录打包拷回 XP。

4.2 处理 mudos.mak 的换行符

把mudos.mak放到上层代码目录(和src同级)。用 UltraEdit 打开,执行替换:把^n替换成^p。这一步是把 Unix 换行符转成 Windows 换行符。不做这一步,VC6.0 打开 mak 文件时看不到任何代码文件,我当初就卡在这里很久。

替换完保存,然后用 VC6.0 打开mudos.mak,应该能看到完整的文件列表。

4.3 补 cc.h

如果没有cc.h,新建一个;如果有,替换成下面内容:

#define COMPILER "cl" #define OPTIMIZE "-G4" #define CFLAGS "-DWIN32 -D_ALL_SOURCE -G4" #define OBJDIR "obj"

4.4 调整工程文件列表

在 VC6.0 的工程里删除malloc.c和mallocwrapper.c,然后添加package/uids.c和package/mudlib_stats.c。这两个文件在老版本里是必须的,不加会链接报错。

4.5 修改 backend.c 的 call_heart_beat()

找到call_heart_beat()函数,删除这两段:

#ifdef WIN32 static long Win32Thread = -1; #endif
if (Win32Thread == -1) Win32Thread = _beginthread(alarm_loop, 256, 0);

删掉是因为 XP 下单线程跑更稳,多线程心跳在老编译器上有兼容问题。

4.6 修 crc32.h 和 crc32.c

在crc32.h的compute_crc32函数之前加入:

typedef unsigned int UINT32;

在crc32.c开头增加:

#include "crc32.h"

4.7 修 crypt.h 的 CONST

把这一行:

char *custom_crypt(CONST char *key, CONST char *salt, byte *rawout);

改成:

char *custom_crypt(char *key, char *salt, byte *rawout);

也就是删掉所有CONST。VC6.0 对CONST宏的处理和现代编译器不同,不删会报类型不匹配。

4.8 替换 interface 变量名

在interface.h、efuns_main.c、compile_file.c、mudlib/interface.c里,把所有名为interface的变量名替换成if_t_array。因为interface在 Windows 头文件里是保留字,不换会冲突。

4.9 创建 configure.h

新建或替换configure.h,内容如下:

#define INCL_STDLIB_H #define INCL_TIME_H #define INCL_FCNTL_H #define INCL_DOS_H #define INCL_SYS_STAT_H #define INCL_LIMITS_H #define USE_STRUCT_DIRENT #define INCL_STDARG_H #define HAS_MEMMOVE #define RAND #define HAS_STRERROR #define HAS_GETCWD #define SIZEOF_INT 4 #define SIZEOF_PTR 4 #define SIZEOF_SHORT 2 #define SIZEOF_FLOAT 4 #define CONFIGURE_VERSION 5

4.10 编译

以上改完,在 VC6.0 里按 F7 编译。如果前面步骤都对,应该能生成MudOS.exe。编译过程中如果报错,把错误信息贴到 TaoToken 的模型对话里问,比翻老论坛快。

5. 验证请求与启动 Mudos 服务

编译出MudOS.exe之后,把它放到你 mudlib 的bin目录下。然后在当前目录创建一个快捷方式,右键属性,在「目标」那一栏的MudOS.exe后面加一个空格,再跟上你的 config 文件路径。比如:

F:\xkx\bin\MudOS.exe config.xkx

运行这个快捷方式,如果配置正确,控制台会输出启动日志,显示驱动版本、加载的 lib 路径、监听的端口。看到类似下面的输出就说明成功了:

MudOS V22pre11 Loading config: config.xkx Initializing... Listening on port 4000

如果启动失败,常见的是 config 文件路径不对,或者 mudlib 目录结构不匹配。检查 config 文件里的mudlib directory和binary directory两个字段,确保指向实际路径。

验证服务是否真的在跑,可以在另一个窗口用 telnet 连一下:

telnet 127.0.0.1 4000

能连上并看到欢迎信息,就说明 Mudos 服务端已经正常工作了。

6. 编译与启动常见错误排查

这一节列几个实际会撞到的报错,以及对应的处理方式。

报错:fatal error C1083: Cannot open include file: 'grammar.tab.h'说明 Linux 侧生成的中间文件没拷过来,或者路径不对。确认grammar.tab.h在src目录下,并且在 VC6.0 的 include 路径里。

报错:error C2065: 'UINT32' : undeclared identifiercrc32.h的typedef没加,或者加的位置不对。必须在compute_crc32函数之前。

报错:error C2371: 'interface' : redefinition; different basic typesinterface变量名没替换干净。检查那四个文件,确保全部换成了if_t_array。

报错:local proxy failed或连接超时这是 TaoToken 配置的问题,不是编译问题。检查ANTHROPIC_BASE_URL或OPENAI_BASE_URL是否写成了https://taotoken.net/api,注意不要带 UTM 参数。Key 是否复制完整,有没有多余空格。

报错:401 UnauthorizedKey 无效或过期。去 API Keys 页面重新创建一个,确认复制的是完整字符串。

报错:reading choices相关错误一般是模型 ID 写错了。去模型对话页确认可用的模型 ID,填到配置里。

报错:OAuth 相关提示如果你用的是 Claude Code 且看到 OAuth 报错,说明它没走 AUTH_TOKEN 而是尝试了 OAuth 流程。确认settings.json里ANTHROPIC_AUTH_TOKEN字段存在且正确。

编译通过但启动闪退检查 config 文件里的路径。XP 下路径分隔符用反斜杠,且不要有中文路径。另外确认MudOS.exe和 config 文件在同一目录,或者快捷方式里的路径是绝对路径。

7. 把工具链接到 TaoToken,继续你的 MUD 项目

编译通过只是第一步。后面你还要调 lib、加房间、改战斗逻辑,这些都会用到模型辅助。把 Claude Code 或 Cline 接上 TaoToken 之后,遇到 Mudos 的运行时错误、efun 用法、LPC 语法问题,直接问就行,不用再翻十几年前的论坛帖。

接入入口我放在这里,按你的使用场景选:

  • 需要 API Key 和接入文档:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 和 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
  • 想先验证模型能不能用:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite
  • 长期做编码和 Agent 任务:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite

Claude Code 的接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里有专门一节,照着配就行。

最后说一个实际经验:XP 虚拟机里跑 VC6.0,内存给到 1GB 以上,编译 Mudos 这种老工程会顺很多。另外mudos.mak的换行符转换一定要用 UltraEdit 做,用记事本另存为有时候不彻底,还是会看不到文件列表。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询