[lsb-discuss] Using LSB 3.1 or 4.0 shared libraries in an LSB 5.0 link?

Mats Wichmann mats at wichmann.us
Mon Apr 25 13:25:43 UTC 2016

On 04/25/2016 04:53 AM, Dallman, John wrote:
> Mats wrote:
>> First off, yes... everything you see above is "as expected". The LSB libraries in /opt/lsb
>> are link-time only libraries; you would expect that your target system's run-time copies
>> would contain the multiple versions. It is by this very trick (only one symbol version in
>> LSB stubs) that building to "a specific LSB version" is made to request the appropriate
>> symbol versions for that binary.
> OK, but it seems I have been suffering from a significant misunderstanding of LSB inter-version compatibility. LSB 3.x applications are supported on LSB 4.x, 5.x and 6.x (when it happens) systems. However, linking this example LSB-3.1-built DSO into an LSB 5.0 application does not work, because the linker checks for all the symbols used by the DSO and fails to find one of them in the LSB 5.0 link-time-only libraries.
> Are there meant to be any promises about DSOs built with older LSB versions being usable in later ones? Or are the promises all in terms of complete applications? I'm used to development tool suppliers not considering this kind of situation.

The promises are mainly for fully linked applications.  It's possible
not everything with DSOs has been fully thought through - my reaction is
that you should be able to transport the libraries between versions but
it looks like the problem you mention is going to crop up.  I've done a
quick experiment and it looks like symbol versions do get picked up
during the creation of the shared library - I see this in a plain .o object:

    12: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND puts

but once that is turned into a shared library it looks like this:

    23: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND puts@@GLIBC_2.2.5

>> For browsing the story about symbol versioning and inclusion in LSB versions, use the LSB
>> Navigator, https://linuxbase.org/navigator
> I think you've misunderstood me. I'm looking for an introduction to how Linux symbol versioning works, and in particular, what the difference between "@" and "@@" means, for "memcpy at GLIBC_2.2.5" and "memcpy@@GLIBC_2.2.5"

@@ refers to the default version, a single @ to other versions that are
also present.

More information about the lsb-discuss mailing list