[FFmpeg-devel] [PATCH] restoring binary compatibility with ffmpeg 0.5

Måns Rullgård mans
Mon Jun 7 10:17:56 CEST 2010


Michael Niedermayer <michaelni at gmx.at> writes:

>> >> >> It changes the name of the symbol.  Anything linked against current
>> >> >> libavcodec will fail after this change.
>> >> >
>> >> > IMO the linker is suposed to find symbols in the linked versions
>> >> > gnu ldso does not, so this doesnt work for us. I still think though
>> >> > that this behavior of gnu ldso is not terribly sane
>> >> 
>> >> How do you expect it to figure that a differently named symbol is
>> >> actually the same thing?  If an app lists foo at LIBAVFORMAT_52 as an
>> >> undefined symbol, some library must provide that exact name.  For
>> >> dynamic symbol resolution, the version tag is effectively part of the
>> >> symbol name.
>> >
>> > readelf -a
>> > for a lib linked with:
>> > LIBC0VER
>> > {
>> >  global:
>> >     functA;
>> > };
>> > LIBA0VER
>> > {
>> >  global:
>> >   *;
>> > }LIBC0VER;
>> >
>> > says:
>> >   000000: Rev: 1  Flags: BASE   Index: 1  Cnt: 1  Name: libA0.so
>> >   0x001c: Rev: 1  Flags: none  Index: 2  Cnt: 1  Name: LIBC0VER
>> >   0x0038: Rev: 1  Flags: none  Index: 3  Cnt: 2  Name: LIBA0VER
>> >   0x0054: Parent 1: LIBC0VER
>> >
>> > so the parent version seems stored in the elf so. And i had naively
>> > assumed that ldso would search it too
>> 
>> You're looking in the wrong place.  The .dynsym table is the relevant
>> one here.
>
> you misunderstand me, i just meant to point out that the information is
> in the ELF file. And i had assumed that ldso could use it which at least
> gnus does not.
> more precissely if it tries to find a foobar at LIBA0VER and fails to find
> it, it could inside this lib retry with foobar at LIBC0VER

Those versions might not be compatible.  There is no way to know.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list