How to get this basic C++ build to work in a nix-shell?

Thanks, I had missed trying out buildInputs! Unfortunately, whether I add glibc.static to the nativeBuildInputs or the buildInputs doesn’t seem to make a difference, and I get the exact same behavior (the shared linking step now fails because only a static glibc is available).

I tried this shell.nix (attempt #4):

{ pkgs ? import <nixpkgs> {} }:
  pkgs.mkShell {
    nativeBuildInputs = with pkgs; [
      gcc
    ];
    buildInputs = with pkgs; [
      glibc.static
    ];
}

And output:

$ nix-shell --pure
[nix-shell]$ ./build.sh 
/nix/store/vfqlryhvm8063hs7ax9k2vb8wmch5v0v-binutils-2.31.1/bin/ld: /nix/store/zxcqmz6sah8h9qqy4w7kknlbkd2m6d0p-glibc-2.31-74-static/lib/libc.a(dl-trampoline.o): relocation R_X86_64_PC32 against symbol `_dl_x86_cpu_features' can not be used when making a shared object; recompile with -fPIC
/nix/store/vfqlryhvm8063hs7ax9k2vb8wmch5v0v-binutils-2.31.1/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
shared FAILED!
static worked!

I also tried variations of this, i.e., leaving the gcc dependency out, adding it to buildInputs instead of nativeBuildInputs, trying nativeBuildInputs = [ glibc.static ] and buildInputs = [ gcc ], but they all result in the same result/output as above.

Also, as long as I add glibc to either the nativeBuildInputs or the buildInputs, the same “cannot find stdlib-headers”-bug from attempt #3 occurs.

Is this what you meant or am I missing something? Thanks!