--- title: "How to Install the 32-bit Libraries HLDS Needs (lib32, i386)" excerpt: "HLDS is a 32-bit binary and modern 64-bit Linux ships none of its runtime. Here is the exact i386 package set for Debian, Ubuntu, and RHEL, plus how to diagnose which one is missing." category: "installation" tags: "linux, dependencies" image: "" read_time: "8 min read" ---

HLDS, ReHLDS, cs.so, Metamod and every AMXX module are 32-bit (i386) ELF objects. A modern 64-bit Linux install has no reason to carry a 32-bit runtime and does not, so the single most common CS 1.6 install failure is a missing i386 library. This guide is the reference for exactly which packages to install and, more usefully, how to work out which one you are actually missing instead of guessing.

1. The tell-tale error

The most confusing symptom is this:

./hlds_linux: No such file or directory

The file plainly exists — you are staring at it. What is missing is the 32-bit ELF interpreter, /lib/ld-linux.so.2. The kernel cannot find the loader named in the binary's header, and reports that as "No such file or directory". The other family of errors names the library directly:

error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Both mean the same thing: install the 32-bit runtime.

2. Enable multiarch (Debian / Ubuntu)

sudo dpkg --add-architecture i386
sudo apt update

Without --add-architecture i386, apt does not even know the :i386 packages exist and refuses to install them.

3. The package set

On current Debian 12 and Ubuntu 22.04/24.04:

sudo apt install -y \
  lib32gcc-s1 \
  lib32stdc++6 \
  libc6:i386 \
  libncurses6:i386 \
  libcurl4:i386
PackageProvidesSymptom if missing
libc6:i38632-bit glibc + ld-linux.so.2No such file or directory
lib32stdc++632-bit libstdc++libstdc++.so.6: cannot open
lib32gcc-s132-bit libgcc_slibgcc_s.so.1: cannot open
libncurses6:i386console text UIconsole garbled / libncurses.so.6 missing
libcurl4:i386HTTP for some AMXX modules/socketsmodule bad load

4. Older releases use different names

Package names drifted over the years. If apt says a package has no candidate, try the alternate:

5. RHEL / CentOS / Rocky / Alma

The i686 packages are the equivalent:

sudo dnf install -y glibc.i686 libstdc++.i686 libgcc.i686 \
  ncurses-libs.i686 libcurl.i686

6. Diagnose exactly what is missing

Do not install packages blindly — ask the binary what it wants. ldd against the 32-bit binary lists every dependency and flags the unresolved ones:

ldd hlds_linux

Any line ending in => not found is a library you are missing; map the .so name back to a package with the table above. Confirm the binary really is 32-bit while you are there:

file hlds_linux

It must say ELF 32-bit LSB executable, Intel 80386. If you are debugging a module rather than the engine, point ldd at it:

ldd cstrike/dlls/cs.so
ldd cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so

This is how you catch the case where the engine starts fine but one AMXX module reports bad load — that module has a 32-bit dependency the engine itself did not need.

Why 32-bit at all, in 2026?

There is no 64-bit build of the Half-Life engine. HLDS, ReHLDS, ReGameDLL, Metamod and every AMXX module are compiled for i386 and always have been — the whole plugin ecosystem is 32-bit, and a 64-bit rebuild would break binary compatibility with thousands of existing modules. So the answer is not "port it to 64-bit", it is "install the 32-bit runtime". This is why file on any part of the stack must always report Intel 80386; a 64-bit object anywhere in the chain is a mistake, not an upgrade.

A note on the Steam runtime

SteamCMD itself is also 32-bit and needs the same libc6:i386 loader. If steamcmd.sh fails before it even downloads anything — complaining it cannot find a 32-bit interpreter — it is the identical missing-i386 problem, fixed by the same package set. Once the runtime is in place, both SteamCMD and the game server it installs will run.

Common errors

Verification

ldd hlds_linux | grep -i "not found"

No output means every dependency resolves. Start the server; it should reach a map instead of dying at load. Once the runtime is in place, the rest of the stack — ReHLDS, ReGameDLL, Metamod and AMXX — all share these same 32-bit libraries, so this is a one-time fix per host.