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@GLIBC_2.2.5" and "memcpy@@GLIBC_2.2.5"


@@ refers to the default version, a single @ to other versions that are
also present.
_______________________________________________
lsb-discuss mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/lsb-discuss

Reply via email to