[Matroska-devel] libmatroska/ebml 0.9.0/0.8.0 is binary incompatible with previous version

Cristian Morales Vega cmorve69 at yahoo.es
Sun May 30 13:27:42 CEST 2010


2010/5/30 Moritz Bunkus <moritz at bunkus.org>:
> Hey,
>
> On Sunday 30 May 2010 12:12:24 Steve Lhomme wrote:
>
>> It's possible to change the .soname although programs that currently
>> depend on libmatroska will have to update their build system too. Also
>> if the goal is to have old and new versions co-exist, shouldn't the
>> headers be in separate dirs too ?
>
> As far as I know you don't have to change anything in the app's build
> system. You usually link against "-lmatroska -lebml", and you have
> symlinks libebml.so pointing to the currently active one,
> e.g. libebml.so.2. The linker embeds the full library name, so upon
> execution it is looking for libebml.so.2 so you can change the symlink
> after linking without breaking existing applications. For example:
>
> [0 mosu at tionne ~] ls -l /usr/lib/libQtCore.so*
> lrwxrwxrwx 1 root root      18 2010-05-25 11:43 /usr/lib/libQtCore.so -> libQtCore.so.4.6.2
> lrwxrwxrwx 1 root root      18 2010-05-25 11:43 /usr/lib/libQtCore.so.4 -> libQtCore.so.4.6.2
> lrwxrwxrwx 1 root root      18 2010-05-25 11:44 /usr/lib/libQtCore.so.4.6 -> libQtCore.so.4.6.2
> -rw-r--r-- 1 root root 2630464 2010-04-14 07:42 /usr/lib/libQtCore.so.4.6.2
>
> The headers' installation directory won't have to be changed either.
>
> The C version libebml2 is different matter.

True.

To summarize, what I would like:

- For libebml2/libmatroska2
Use symbol versioning

- For libebml/libmatroska
I suppose it will be deprecated once libebml2/libmatroska2 is released
(soon?), so don't worry about symbol versioning now.
If you have the policy of not thinking about binary compatibility at
all it's ok, but make that clear. Don't name the library
libebml.so.0.8.1, with soname libebml.so.0; but libebml-0.8.1.so, with
soname libebml-0.8.1.so.
If you are going to try to maintain binary compatibility change the
soname when it breaks. So next version should have soname libebml.so.1
or libebml.so.2 (in case some distro already changed the soname).



More information about the Matroska-devel mailing list