NixOS에서 프로그램을 정적으로 컴파일하는 방법은 무엇입니까?

NixOS에서 프로그램을 정적으로 컴파일하는 방법은 무엇입니까?

간단한 프로그램을 정적 실행 파일로 컴파일하려고 합니다.

$ cat hello.c
#include <stdio.h>
int main() {
    puts("Hello, world!");
}

그러나 다음과 같은 오류가 발생합니다.

$ gcc -static hello.c -o hello
/nix/store/p792j5f44l3f0xi7ai5jllwnxqwnka88-binutils-2.31.1/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status

답변1

이는 nixpkgs에 static libc가 별도로 제공되기 때문입니다. 이 시도:

$ nix-shell -p gcc glibc.static
these paths will be fetched (1.37 MiB download, 9.12 MiB unpacked):
  /nix/store/7q44r8ps2yv9zr1bxhff49xb6hh3xrnn-glibc-2.31-static
copying path '/nix/store/7q44r8ps2yv9zr1bxhff49xb6hh3xrnn-glibc-2.31-static' from 'https://cache.nixos.org'...

[nix-shell:~]$ gcc -static hello.c -o hello

물론 정적 라이브러리가 자주 필요한 경우 이 패키지를 구성에 추가할 수 있습니다.

관련 정보