nkdm
nkdm

Reputation: 1240

Link glibc statically but some other library dynamically with GCC

I need to statically link glibc to my project, because the target platform supports only a very old one ( but it works with statically linked glibc from my toolchain, I have checked it)

Unfortunately, this application has to make use of pthread library, but statically linked libpthread takes too much space.

I would like to statically link glibc, and dynamically pthread.

After running this command

powerpc-unknown-linux-gnu-gcc object_files -lrt -lpthread -Wl,-Bstatic -lc 

I get:

/powerpc-unknown-linux-gnu/bin/ld: cannot find -lgcc_s

Upvotes: 16

Views: 43503

Answers (2)

R.. GitHub STOP HELPING ICE
R.. GitHub STOP HELPING ICE

Reputation: 215173

You should be using -static, not -Wl,-static. The latter bypasses gcc's knowledge, and therefore gcc is still trying to link the shared libgcc_s.so rather than the static libgcc_eh.a.

If your aim is to link libc statically but libpthread dynamically, this is simply not going to work. You cannot mix and match different versions of libpthread; it's part of glibc, just a separate file, and the internals need to match. Even with the same version, I think linking libc statically and libpthread dynamically will be very broken.

If glibc is too big for your needs, you could try an alternate libc like uClibc or musl.

Upvotes: 9

Anycorn
Anycorn

Reputation: 51435

There is a -static-libgcc if that may help

Upvotes: 11

Related Questions