
1. 为什么 2024 年还在折腾 OpenClaw 编译如果你手里有一份《Captain Claw》的正版资源又不想被 640x480 的窗口和 30 帧锁死那 OpenClaw 这个开源引擎重制项目基本是唯一解。它把 1997 年那套 DOS/Win9x 时代的渲染逻辑整个换掉底层走 SDL2 做窗口与输入、OpenGL 做纹理与缩放再配一份 config.xml 管分辨率、音量、按键映射。换句话说你拿到的不是模拟器而是一个能跑在现代显卡驱动上的原生程序。但问题也出在这OpenClaw 官方仓库的构建脚本对新手不算友好CMake 版本、SDL2 的查找路径、OpenGL 头文件、以及最容易被忽略的 config.xml 资源路径任何一环对不上你看到的不是游戏而是一串CLAW.REZ not found或者黑屏闪退。我试过在 Ubuntu 24.04 和 Windows 11 MSYS2 两套环境里从零走一遍踩的坑基本集中在依赖版本和资源目录结构上。这篇就按「装依赖 → CMake 构建 → 放资源 → 改 config.xml → 启动验证 → 排错」的顺序写命令可以直接复制。适合两类人一是想自己编译最新开发版、拿到宽屏和高帧率的玩家二是想拿 OpenClaw 当 SDL2 OpenGL 练手项目的开发者。全程不需要任何网络加速工具所有依赖都走系统包管理器或官方源。2. 前置准备TaoToken 与构建环境2.1 为什么这里会提到 TaoToken编译 OpenClaw 本身不依赖任何在线服务但如果你在排错阶段想让模型帮你读 CMake 报错、解释SDL2_mixer not found这类日志或者想让它根据你的 config.xml 生成一份宽屏配置用 TaoToken 的模型对话会省很多来回。它的 API 入口是 https://taotoken.net/api 兼容常见的对话补全格式你可以在自己的脚本里直接调用把编译日志贴进去让它定位问题。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台生成 Key 即可。需要说清楚TaoToken 在这里的角色是「排错助手」和「配置生成助手」不是编译依赖。OpenClaw 的构建完全离线你完全可以不接任何模型服务就跑起来。下面先把本地环境搭好。2.2 依赖安装清单不同系统要装的包不一样我按平台列一份最小清单。SDL2 负责窗口、音频、手柄OpenGL 负责渲染CMake 负责构建三者缺一不可。Ubuntu / Debian 系sudo apt update sudo apt install -y build-essential cmake git \ libsdl2-dev libsdl2-mixer-dev libsdl2-image-dev \ libgl1-mesa-dev libglew-dev libtinyxml-devFedora / RHEL 系sudo dnf install -y gcc-c cmake git \ SDL2-devel SDL2_mixer-devel SDL2_image-devel \ mesa-libGL-devel glew-devel tinyxml-develmacOSHomebrewbrew install cmake sdl2 sdl2_mixer sdl2_image glew tinyxmlWindows 建议走 MSYS2 的 UCRT64 环境包名和 Fedora 类似pacman -S --needed mingw-w64-ucrt-x86_64-gcc \ mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-SDL2 \ mingw-w64-ucrt-x86_64-SDL2_mixer mingw-w64-ucrt-x86_64-SDL2_image \ mingw-w64-ucrt-x86_64-glew mingw-w64-ucrt-x86_64-tinyxml注意SDL2_mixer 是音频的关键缺了它 CMake 能过但运行时会静音甚至直接崩。tinyxml 用来解析 config.xml也别漏。2.3 拉取源码git clone https://github.com/pjasicek/OpenClaw.git cd OpenClaw git submodule update --init --recursive--recursive别省仓库里有些第三方目录是子模块不初始化 CMake 会报找不到源文件。3. 可复制配置CMake 构建与 config.xml 骨架3.1 CMake 构建命令OpenClaw 用的是传统 CMake 流程推荐 out-of-source 构建别在源码根目录直接cmake .否则清理很麻烦。mkdir -p build cd build cmake .. \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX$HOME/.local make -j$(nproc)Windows MSYS2 下把$(nproc)换成$(nproc)也能用或者直接写-j8。构建完成后可执行文件在build/目录下Linux 叫openclawWindows 叫openclaw.exe。如果 CMake 报找不到 SDL2可以显式指定路径Linux 示例cmake .. \ -DCMAKE_BUILD_TYPERelease \ -DSDL2_DIR/usr/lib/x86_64-linux-gnu/cmake/SDL2 \ -DSDL2_MIXER_PATH/usr/lib/x86_64-linux-gnumacOS 用 Homebrew 的话通常 CMake 能自动找到找不到就加-DCMAKE_PREFIX_PATH$(brew --prefix)。3.2 资源目录结构OpenClaw 只带引擎不带游戏资源。你需要从正版《Captain Claw》里提取CLAW.REZ放进ASSETS文件夹。正确结构如下OpenClaw/ ├── openclaw # 编译产物或从 build/ 拷过来 ├── config.xml # 配置文件 ├── ASSETS/ │ ├── CLAW.REZ # 必需主资源包 │ ├── LEVEL1.PAL # 调色板部分版本需要 │ └── ... ├── save/ └── screenshots/ASSETS目录名大小写敏感Linux 下写成assets会直接找不到。CLAW.REZ同理别改名。3.3 config.xml 骨架config.xml 是 OpenClaw 启动时读取的配置放在可执行文件同级目录。下面这份是我实测能跑宽屏 1080p 的骨架字段含义写在注释里?xml version1.0 encodingUTF-8? config video width1920/width height1080/height fullscreenfalse/fullscreen vsynctrue/vsync scale2/scale /video audio music_volume0.7/music_volume sfx_volume1.0/sfx_volume /audio game difficultynormal/difficulty show_fpstrue/show_fps /game controls keyboard leftLEFT/left rightRIGHT/right jumpUP/jump attackLCTRL/attack magicLALT/magic /keyboard /controls /config几个容易踩的点scale控制像素缩放倍数1080p 下建议 2 或 3设太大纹理会有锯齿vsync开着能防撕裂但如果你显示器刷新率很高又觉得输入延迟可以关掉show_fpstrue/show_fps在排错阶段很有用能直观看到帧率是否正常。提示改完 config.xml 不用重新编译直接重启程序即可生效。如果改了没反应检查是不是程序实际读取的是另一个目录下的 config.xml。4. 验证请求启动与成功结果4.1 启动命令Linux / macOS./openclaw --assets-path ./ASSETS --config ./config.xmlWindowsopenclaw.exe --assets-path .\ASSETS --config .\config.xml如果资源目录和配置文件都在默认位置直接./openclaw也能跑。命令行参数优先级高于 config.xml临时切窗口模式可以用--windowed。4.2 成功结果长什么样启动后你应该看到窗口按 config.xml 里的分辨率打开出现 OpenClaw 的标题画面按任意键进入主菜单菜单里能看到 New Game、Load Game、Options、Quit。进游戏后左上角如果开了show_fps会显示实时帧率现代机器上通常能跑到 60 以上。验证资源是否被正确加载最直接的方法是看主菜单能不能进 New Game。如果CLAW.REZ没放对程序会在启动阶段就报错退出而不是进菜单后才崩。4.3 用模型对话辅助排错如果你在启动阶段拿到一段看不懂的日志比如Failed to open ASSETS/CLAW.REZ: No such file or directory可以把日志贴到 TaoToken 的模型对话里让它帮你判断是路径问题还是文件权限问题。入口在 https://taotoken.net/api 用控制台生成的 Key 调用即可。这一步不是必须的但能省掉大量翻文档的时间。5. 本篇常见错排查5.1 CMake 阶段找不到 SDL2 或 OpenGL报错形如Could NOT find SDL2 (missing: SDL2_LIBRARIES SDL2_INCLUDE_DIRS)。先确认libsdl2-dev装没装再确认 CMake 版本不低于 3.10。Linux 下可以用dpkg -L libsdl2-dev | grep cmake看 SDL2 的 CMake 配置目录在哪然后用-DSDL2_DIR指过去。OpenGL 报错通常是缺libgl1-mesa-dev或libglew-dev补装即可。5.2 链接阶段undefined reference toMix_OpenAudio这是 SDL2_mixer 没链接上。检查是否装了libsdl2-mixer-dev以及 CMake 输出里有没有Found SDL2_mixer。如果装了还报清掉 build 目录重新cmake ..CMake 缓存有时会记住旧的查找结果。5.3 运行阶段CLAW.REZ not found三种可能一是ASSETS目录名写错或位置不对必须在可执行文件同级二是CLAW.REZ文件名被改过必须全大写三是用了--assets-path但路径是相对路径而你在别的目录启动程序。建议先用绝对路径试一次./openclaw --assets-path /home/yourname/OpenClaw/ASSETS5.4 运行阶段黑屏但有声音多半是 OpenGL 上下文没建起来。先确认显卡驱动正常Linux 下glxinfo | grep OpenGL version能看到版本号。如果版本低于 2.0OpenClaw 跑不了。另外 config.xml 里fullscreentrue/fullscreen在某些窗口管理器下会黑屏改成false用窗口模式验证一次。5.5 运行阶段帧率异常低先看show_fps显示的数值。如果只有个位数检查是不是开了软件渲染LIBGL_ALWAYS_SOFTWARE1这类环境变量。如果帧率正常但感觉卡顿把vsync关掉试试。还有一种情况是scale设得过大比如 4K 屏上设了 4纹理采样压力大降到 2 会明显改善。5.6 config.xml 改了不生效OpenClaw 读取 config.xml 的路径是「可执行文件同级目录」不是当前工作目录。如果你在build/里跑程序但 config.xml 放在源码根目录那读的是build/config.xml。把 config.xml 拷到可执行文件旁边或者用--config显式指定。6. 继续折腾的方向与工具入口把上面跑通之后你可以进一步调 config.xml 里的按键映射把手柄也接上或者改 CMake 的CMAKE_BUILD_TYPEDebug编译一份带符号的版本用 gdb 跟一下渲染循环。如果你想让模型帮你生成一份适配自己手柄的 config.xml或者解释某段 OpenGL 初始化代码可以用 TaoToken 的模型对话API 地址 https://taotoken.net/api Key 在控制台生成https://taotoken.net/console 。长期做 C 游戏引擎开发的话Coding Plan 更适合持续调用https://taotoken.net/coding-plan 。接入文档在 https://taotoken.net/doc API Key 管理页在 https://taotoken.net/api-keys 。如果你用的是 Claude Code 这类工具Anthropic 兼容入口在 https://taotoken.net/claude-code 。这些入口按需取用编译 OpenClaw 本身不需要它们但排错和二次开发阶段会顺手很多。