cib
cib

Reputation: 2414

What does the .0 in shared library names refer to?

When trying to start third-party binaries under linux, I very often get an error along the lines of "libX.so.0" was not found, even though libX.so is located in my /usr/lib. I always thought just soft-linking /usr/lib/libX.so to /usr/lib/libX.so.0 would work, but I seem to have been wrong.

/usr/lib/libpng12.so.0: version `PNG12_0' not found

Is the _0 in this name related to the .0 in libpng12.so.0? If so, what exactly does it mean? Is there some way to identify the source code version I need to download from either the PNG12_0 identifier, or the libpng12.so.0 name?

Upvotes: 0

Views: 574

Answers (1)

Employed Russian
Employed Russian

Reputation: 213596

I very often get an error along the lines of "libX.so.0" was not found, even though libX.so is located in my /usr/lib

You can read about external library versioning here.

Is the _0 in this name related to the .0 in libpng12.so.0?

Very likely yes.

If so, what exactly does it mean?

The symbol versioning is a GNU extension to library versioning. I can't find a good description of it, but it allows a single externally-versioned library (e.g. libc.so.6) to provide multiple incompatible implementations of the same symbol (before symbol versioning, you had to update the external version of the library every time you introduced incompatible interface; but with symbol versioning you don't).

Long story short: the _0 means whatever developers decided it means.

Upvotes: 1

Related Questions