如何在 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中单独提供了静态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

当然,如果您经常发现自己需要静态库,您可以将此包添加到您的配置中。

相关内容