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
| Package | Provides | Symptom if missing |
|---|---|---|
libc6:i386 | 32-bit glibc + ld-linux.so.2 | No such file or directory |
lib32stdc++6 | 32-bit libstdc++ | libstdc++.so.6: cannot open |
lib32gcc-s1 | 32-bit libgcc_s | libgcc_s.so.1: cannot open |
libncurses6:i386 | console text UI | console garbled / libncurses.so.6 missing |
libcurl4:i386 | HTTP for some AMXX modules/sockets | module 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:
lib32gcc-s1waslib32gcc1on older Ubuntu/Debian.libncurses6:i386may belibncurses5:i386on older releases; some binaries wantlibtinfotoo.- On some releases the meta-package
libc6-i386is the way glibc's 32-bit files are shipped rather thanlibc6:i386.
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
- Installed the packages, still
No such file or directory— you installed the 64-bit versions. Confirm the:i386(or.i686) suffix; the plain package is the wrong architecture. E: Unable to locate package lib32gcc-s1— you skippeddpkg --add-architecture i386andapt update, or you are on a release that names itlib32gcc1.- One module fails, engine is fine — run
lddon that module; it needs a 32-bit library (oftenlibcurl4:i386for sockets/HTTP modules) the engine does not. - Everything resolves in
lddbut it still won't start — the binary itself is 64-bit or corrupt. Check withfile; re-download if it is not Intel 80386.
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.









