3

If I run something like:

rpm -q --fileprovide foo-1.0.0-0.x86_64

I get a list of files, and some of them have an identifier on the right for them, like:

/usr/lib64/bar.so.4        bar.so.4()(64bit)

From what I can tell, there seem to be 3 components to these identifiers comprising SONAME, (), (CPU-ARCH). However I can't find anywhere online what these components are formally called, nor what you call that right-hand side identifier. Why is there an empty (), what values could be inside there? It all seems to be following some kind of convention, just don't know what it is...

1 Answer 1

4

RPM tracks libraries using the soname, just like the ELF linker/loader.

When versioned symbols were added to glibc, RPM appended unique versions inside of the first set of parentheses. See "rpm -q --fileprovide glibc" for many examples.

When multilib (both 32bit and 64bit libraries on same system) was added, a "(64bit)" marker was appended to distinguish.

Unfortunately, a miscommunication led to an empty "()" being added with libraries that do not have versioned symbols. In principle, symbol versions would appear within the empty "()", but very few libraries other than glibc use symbol versioning.

2
  • 1
    do you have any references to the "miscommunication"?
    – bhh1988
    Mar 22, 2017 at 5:03
  • 1
    Aside from being one of the participants to the miscommunication, no. It was over 15y ago. Mar 23, 2017 at 17:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .