How to Compile ReGameDLL_CS from Source

September 24, 2025 Daemon666 8 min read 12 преглеждания

Compiling ReGameDLL_CS yourself is worth doing for the same reasons as ReHLDS: you know exactly what is running on your server, and you can pick up a fix that is merged upstream but not yet released. The build is a 32-bit C++ compile with a Python driver script, and the cleanest way to get a reproducible 32-bit toolchain on a modern 64-bit host is a container.

1. The build container

Dockerfile.regamedll:

FROM debian:12

RUN dpkg --add-architecture i386 \
 && apt-get update \
 && apt-get install -y --no-install-recommends \
      build-essential gcc-multilib g++-multilib libc6-dev-i386 \
      python3 git ca-certificates \
 && rm -rf /var/lib/apt/lists/*

WORKDIR /src
docker build -t regamedll-build -f Dockerfile.regamedll .

If you already built the ReHLDS container from the ReHLDS source guide, reuse it — the requirements are the same.

2. Clone with submodules

mkdir -p ~/build && cd ~/build
git clone --recursive https://github.com/s1lentq/ReGameDLL_CS.git
cd ReGameDLL_CS

The --recursive flag is not optional. ReGameDLL depends on shared headers pulled in as submodules; without them the compile dies on missing includes and looks like a broken toolchain. If you forgot:

git submodule update --init --recursive

3. Pin the revision

Check out the tag that matches the ReGameDLL release you would otherwise have downloaded, or a specific commit. Never deploy an unpinned master to a production server — you cannot reproduce it later and you cannot tell what changed.

git tag --sort=-creatordate | head -5
git checkout <tag>
git rev-parse HEAD | tee ../regamedll-commit.txt

4. Compile

docker run --rm -it \
  -v ~/build/ReGameDLL_CS:/src \
  -w /src \
  regamedll-build bash

Inside the container, run the repository's build script. ReGameDLL ships a Python build driver at the repo root; the usual invocation is a clean release build:

python3 build.py --clean

If the script or its flags differ in the revision you checked out, follow the repository's own build instructions instead of guessing — this project has changed build systems over its lifetime, and made-up flags will only cost you time.

The build produces, among other artefacts:

cs.so          (Linux game library)
game.cfg
game_init.cfg
delta.lst

The three config/data files are part of the release, not incidental. Ship them with the binary — a ReGameDLL cs.so with a stale delta.lst is one of the reliable ways to get a crash the moment a player connects.

5. Check the binary before you trust it

file cs.so
ldd cs.so

file must report:

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked

If it says x86-64, your multilib setup silently produced a 64-bit object; the server will refuse it with wrong ELF class: ELFCLASS64. ldd must resolve every dependency — a not found line tells you which 32-bit library the target box is missing.

Confirm the symbol the engine actually asks for is exported:

nm -D --defined-only cs.so | grep -i GiveFnptrsToDll

If that symbol is absent, the engine will fail with Couldn't get DLL API from ./cstrike/dlls/cs.so! and no amount of config will help — the build is wrong.

6. Deploy

cd /home/steam/hlds/cstrike
cp dlls/cs.so dlls/cs.so.bak
cp /path/to/build/cs.so       dlls/cs.so
cp /path/to/build/game.cfg    game.cfg
cp /path/to/build/game_init.cfg game_init.cfg
cp /path/to/build/delta.lst   delta.lst
chmod 644 dlls/cs.so

Do not copy liblist.gam from the build tree. If Metamod is installed, your liblist.gam points gamedll_linux at addons/metamod/metamod.so; overwriting it points the engine straight at cs.so and silently disables Metamod and every AMXX plugin.

7. Verify on the server

./hlds_run -game cstrike +map de_dust2 +maxplayers 20 +sv_lan 0

Then in the console:

regamedll_version
meta list

regamedll_version must print your build's version. meta list must still show every plugin as RUN. Play a full round and force a map change — that is where a mismatched delta.lst announces itself.

Common build errors

  • skipping incompatible ... when searching for -lstdc++ — the 32-bit libstdc++ is missing or -m32 is not being passed. Install g++-multilib.
  • fatal error: bits/c++config.h: No such file or directory — same root cause: no 32-bit C++ headers.
  • Missing headers under a vendor/submodule path — you cloned without --recursive.
  • Build succeeds, server segfaults immediately — you are running a fresh ReGameDLL against a very old engine. Update ReHLDS to a release from the same period; see ReGameDLL/ReHLDS incompatibility.

Keep a record

Store regamedll-commit.txt next to the deployed cs.so, and note the matching ReHLDS commit. When someone reports a bug six months from now, the first question is "which build?" — and being able to answer it in five seconds instead of an evening is the entire payoff of building from source. Next: install ReAPI, which is only usable once ReGameDLL is in place.

Сътрудници: Daemon666 ✦
Сподели: