Statically linking against any system library, and especially against libc
, on modern UNIX or Linux systems makes the binary significantly less portable. Just don't do it.
Instead, use backward compatibility (binaries linked on an older system continue to run on all newer ones) to your advantage, either by linking your binary on an old system (I use RedHat 6.2, and I have not seen a Linux system where my binary will not run in the last 8 years), or by using something like autopackage (which has been deleted after this answer was written).
To answer your original question:
gcc main.o -Wl,-Bstatic -lfoo -Wl,-Bdynamic
will cause linker to use archive version of libfoo. [It is important to have the trailing -Wl,-Bdynamic
precisely so you don't force static libc.]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…