如何使用 make/gcc 静态链接除 glibc 之外的所有库?

Dan*_*sta 5 gcc makefile glibc

我正在尝试编译一个程序,将所有库静态地包含在最终的二进制文件中,但我仍然希望动态链接 glibc。如果我使用“-static”,它会静态编译所有库,包括 glibc。基本上我需要一个 -static 参数和 -exclude=glibc 之类的东西,使用“make”时的示例以及纯“gcc”的示例都会很棒。在最终的二进制文件上运行“ldd”应该只显示 glibc 动态链接。

Flo*_*mer 5

-Bstatic您可以使用和静态链接库的子集-Bdynamic。在 GCC 命令行上,这看起来像这样(用于静态链接 PCRE,仅作为示例):

-Wl,-Bstatic -lpcre -Wl,-Bdynamic
Run Code Online (Sandbox Code Playgroud)

请注意-lanl-ldl, , -lm, -lmvec, -lnsl, -lpthread, -lresolv, -lrt,-lutil都是 glibc 的一部分,因此必须位于 后面-Wl,-Bdynamic(以便它们动态链接)。对于-lcrypt,这取决于分布。