How to Install the 32-bit Libraries HLDS Needs (lib32, i386)

December 17, 2025 Daemon666 8 min read 12 views

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:

  • lib32gcc-s1 was lib32gcc1 on older Ubuntu/Debian.
  • libncurses6:i386 may be libncurses5:i386 on older releases; some binaries want libtinfo too.
  • On some releases the meta-package libc6-i386 is the way glibc's 32-bit files are shipped rather than libc6: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 skipped dpkg --add-architecture i386 and apt update, or you are on a release that names it lib32gcc1.
  • One module fails, engine is fine — run ldd on that module; it needs a 32-bit library (often libcurl4:i386 for sockets/HTTP modules) the engine does not.
  • Everything resolves in ldd but it still won't start — the binary itself is 64-bit or corrupt. Check with file; 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.

Contributors: Daemon666 ✦
Share: