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

Reinhard Tartler siretart
Mon Jun 7 13:11:41 CEST 2010


On Mo, Jun 07, 2010 at 12:52:14 (CEST), Michael Niedermayer wrote:

> On Mon, Jun 07, 2010 at 09:42:42AM +0200, Reinhard Tartler wrote:
>> On Mo, Jun 07, 2010 at 08:02:54 (CEST), Reimar D?ffinger wrote:
>> 
>> > On Mon, Jun 07, 2010 at 07:52:11AM +0200, Reinhard Tartler wrote:
>> >> void av_init_packet(AVPacket *pkt) av_weak_alias(av_init_packet);
>> >> void av_init_packet(AVPacket *pkt)
>> >> {
>> >>     av_log(NULL, AV_LOG_WARNING, "diverting av_*_packet function calls to libavcodec. Recompile to improve performance\n");
>> >>     av_init_packet(pkt);
>> >
>> > ff_internal_init_packet() and add one such to lavc.
>> > Either way, we should make sure we have a solution the next time.
>> > Since the @LIBAVFORMAT version is not accepted in lavc, does that
>> > mean no matter what we do, we will always break ABI if we move code?!
>> 
>> if I understand you correctly, you not only consider ABI breakages
>> between releases, but also between any svn revision? 
>
> i do

OK. I agree that we should unneccessarily do such breakages, not even in
trunk nor elsewhere.

>
>> Then I fear yes.
>> However, the break is already there since quite some time, and fixing it
>> to have it compatible to ffmpeg 0.5 has (or at least should have)
>> priority, IMO.
>
> for future moves, is there a problem with moving the symbols and
> updating the version script in the new home so it matches the version
> of the old (@LIBAVFORMAT in lavc for the specific symbols)
> ?

We could, but this wouldn't help. As you already noticed, ld-linux.so
obviously really expects the versioned symbol to be in libavformat:

>> objdump -T /tmp/ffmpeg/lib/libavcodec.so.52 | grep av_init_packet
000c0ce0 g    DF .text	00000058  LIBAVFORMAT_52 av_init_packet

>> ffplay /tmp/Elephants_Dream-720p-Stereo.webm
FFplay version SVN-r0.5.1-4:0.5.1-1ubuntu1, Copyright (c) 2003-2009 Fabrice Bellard, et al.
  configuration: --extra-version=4:0.5.1-1ubuntu1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.72. 2
  libavformat   52.31. 0 / 52.64. 2
  libavdevice   52. 1. 0 / 52. 2. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0.11. 0
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Mar  4 2010 12:35:30, gcc: 4.4.3
ffplay: relocation error: ffplay: symbol av_init_packet, version LIBAVFORMAT_52 not defined in file libavformat.so.52 with link time reference

This behavior of ld-linux.so is here very annoying, right.

> for our case here this fails because we have libs that expect the symbols
> with @LIBAVCODEC and ldso isnt smart enough but that wouldnt be if we had
> updated the version script when the move happened.

I fear that wouldn't have helped either, see above.

-- 
Gruesse/greetings,
Reinhard Tartler, KeyID 945348A4




More information about the ffmpeg-devel mailing list