Hello Simon, * Simon Richter wrote on Tue, Nov 10, 2009 at 01:41:27PM CET: > I have a project with two libraries exposing different levels of detail > to the user, basically one provides (C++) base classes with some > functionality, and the other one provides classes derived from those > with the actual implementation. > > Since the latter is going to change often, I'd rather not expose the > derived interface to anyone who doesn't need it, to save me from > rebuilding and relinking all applications and bumping SONAME all of the > time. > > Now, the two libraries, let's call them libbase and libderived, have > mutual references: libbase needs to call into libderived to construct > the actual object, and libderived needs to call into libbase for > functions that are implemented in the base classes but called from the > derived ones. > > The desired result is that applications that are content with the base > interface can link against libbase and ignore libderived, and > applications that require full access to the derived interface link > against both libraries. When the derived interface changes, I can then > bump the SONAME of libderived, and rebuild libbase and all apps that > directly link against libderived, and get back to a consistent set.
> Is something like this possible using libtool, You can try adding --preserve-dup-deps to *_LIBTOOLFLAGS to keep duplicate entries in the link libs, but you might still have to do tricks with -Wc, or -Wl, anyway. libtool without link_all_deplibs=no (i.e., everywhere except on Debian with its patched libtool) will link against all deplibs; this will destrory your strategy of only rebuilding libbase dependents, unless you remove or rewrite the libbase.la file, unfortunately. > and if so, can it be done portably? Probably not for non-ELF systems. On AIX you can probably get away with runtimelinking (-Wl,-brtl), on w32 you may have to manually create an import library stub for whichever library you build second. libtool has no builtin support for this. HTH. Cheers, Ralf _______________________________________________ http://lists.gnu.org/mailman/listinfo/libtool