[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
05 Nov 2002 15:50:50 -0600
i'm curious what the proper solution is to the following problem:
- i have a shared library, libfoo-internal.so
- i have another shared library, libfoo.so that depends on
- the interface between these two libraries may change in any given
version of foo. i'm compiling libfoo-internal.so with -release XX.YY to
make sure libfoo.so uses the correct version.
- the interface from libfoo.so to any applications that use it is stable
throughout a given major version (eg: libfoo-1.0.so and libfoo-1.4.so
have the same interface to the application). i use -version_info XX.YY
to handle this.
- when i use libtool to generate my .la files, i find that libfoo.la
contains the line dependency_libs="libfoo-internal.la". this means that
when my applications link against libfoo.so, they're also linked against
its dependencies (libfoo-internal.so). this is unacceptable because i
don't want my applications to be aware of libfoo-internal.so. they
should only know about the libfoo.so interface. otherwise, i'd have to
recompile my applications for every bugfix release.
i've found 2 solutions to the problem, neither of which i like.
1. change all apps that compile against libfoo.so to have
link_all_deplibs=no. this is undesirable for maintenance reasons.
2. manually remove the libfoo-internal.la entry from libfoo.la's
i understand that on some systems (AIX, i think?) i'm out of luck -- the
dynamic loader can only handle one level of dependencies. but what about
linux, where it's perfectly fine to stick a -lfoo on the linker command
for application bar and when bar loads libfoo.so, the loader will
automatically pull in libfoo-internal.so?
i hope this is coherent. any direction is appreciated.