dsimcha
dsimcha

Reputation: 68740

Why would it be impossible to fully statically link an application?

I'm trying to compile a statically linked binary with GCC and I'm getting warning messages like:

warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

I don't even know what getwnam_r does, but I assume it's getting called from inside some higher level API. I receive a similar message for gethostbyname.

Why would it not be possible to just statically link these functions in like every other function?

Upvotes: 16

Views: 7946

Answers (2)

thiton
thiton

Reputation: 36049

Function calls that need access to NSS or iconv need access will open other libs dynamically, since NSS needs plugins to work (the helper modules like pam_unix.so). When the NSS system dlopens these modules, there will be two conflicting versions of glibc - the one your program brought with it (statically compiled in), and the one dlopen()ed by NSS dependencies. Shit will happen.

This is why you can't build static programs using getpwnam_r and a few other functions.

Upvotes: 30

m0skit0
m0skit0

Reputation: 25873

AFAIK, it's not impossible to fully statically link an application.

The problem would be incompatibility with newer library versions which might be completely different. Say for example printf(). You can statically link it, but what if in a future that printf() implementation changes radically and this new implementation is not backward-compatible? Your appliction would be broken.

Please someone correct me if I'm wrong here.

Upvotes: -2

Related Questions