Loading multiple shared libraries with different versions Loading multiple shared libraries with different versions linux linux

Loading multiple shared libraries with different versions


You may be able to do some version script tricks:

http://sunsite.ualberta.ca/Documentation/Gnu/binutils-2.9.1/html_node/ld_26.html

This may require that you write a wrapper around your lib that pulls in libfoo.so.1 that exports some symbols explicitly and masks all others as local. For example:

MYSYMS { global: foo1; foo2; local: *;};

and use this when you link that wrapper like:

gcc -shared -Wl,--version-script,mysyms.map -o mylib wrapper.o -lfoo -L/path/to/foo.so.1

This should make libfoo.so.1's symbols local to the wrapper and not available to the main exe.


I can only come up with a work-around. Which would be to statically link a version of the "system library" that you are using. For your static build, you could make it link against the same old version as the third-party library. Given that it does not rely on the newer version...

Perhaps it is also possible to avoid these problems with not linking to the third-party library the ordinary way. Instead, your program could load it at execution time. Perhaps then it could be shadowed against the rest. But I don't know much about that.