Discussion about bug #615504

Paul Smith paul at mad-scientist.net
Tue Aug 17 15:22:08 UTC 2010

On Tue, 2010-08-17 at 11:56 -0300, Leandro de Oliveira wrote:
> I thought not having a versionless symlink was a bug, but it seems to
> be an explicit decision, if that is the case, then java apps using
> bluetooth will always need the user to install libbluetooth-dev
> instead of being able to work with the latest version. Since backwards
> compatibility should be a given, I don't see why there coudn't be a
> versionless symlink.

But, backward compatibility is NOT a given; that's why we have versioned
libraries in the first place.

In a POSIX-y system like Linux, shared library versions work like this
typically: the library filename is "libfoo.so.x.y" where "x" is the
major version and "y" (which might have multiple parts) is the minor

The rules are that any changes that do not modify the library ABI can
change only the "y" version but leave the "x" version the same, and
these can be used without recompiling code.

Any changes the modify the library ABI _must_ change the "x" version,
and all applications must link against the new version explicitly.

To support this, the linker (usually) puts a reference to "libfoo.so.x"
in the binary so that's the library that the runtime linker looks for,
and the package will install a symlink "libfoo.so.x" which points to the
currently-installed/newest "libfoo.so.x.y" shared library.

In order for new applications to be compiled, the development package
installs a symlink "libfoo.so" which points to the
currently-installed/newest "libfoo.so.x", or major version.  The
compile-time linker, when it sees "-lfoo" on the link line, will search
for "libfoo.so" and link that, putting (as above) "libfoo.so.x" into the
binary for the runtime linker to find.

Some incorrectly-built applications force the compile-time linker to add
"libfoo.so", only, to the binary: this is wrong because it doesn't
follow the conventions above and the "libfoo.so" won't be available on
systems which do not have developer packages installed (as above).

Note that shared libraries can reference other shared libraries and
typically follow the same rules as above.

You should file a bug against the Bluecove library: it's not being
created properly.

More information about the Ubuntu-devel-discuss mailing list