Merge multiple .so shared libraries

Metiu picture Metiu · May 27, 2009 · Viewed 31.6k times · Source

Say I have a.so and b.so. Can I produce c.so as a single shared library with all the functions exported by a and b, of course resolving all intra-dependencies (i.e. all functions of b.so called by a.so and the other way around)?

I tried

gcc -shared -Wl,soname,c.so -o c.so a.so b.so

but it doesn't work.

Same goes if I archive a.o and b.o in a.a and b.a (which shouldn't modify a.o and b.o), and do

gcc -shared -Wl,soname,c.so -o c.so a.a b.a

Thanks

Answer

Employed Russian picture Employed Russian · May 29, 2009

Merging multiple shared libraries into one is indeed practically impossible on all UNIXen, except AIX: the linker considers the .so a "final" product.

But merging archives into .so should not be a problem:

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive