[Libav-user] make shared lib including libav*.a on linux x64 platform

Nick Paul nickpaul at letterboxes.org
Thu Apr 17 13:38:29 CEST 2014


>         I'd like to make a shared library called mylib.so that include
>         static ffmpeg libraries libavcodec.a libavformat.a ..etc. in
>         order to have just one shared library
>         I'm working on a linux machine 64 bit (ubuntu 12.04).
>         I've built ffmpeg libraries from ffmpeg 2.0.1 sources with this
>         configuration:
>         --prefix="$HOME/ffmpeg_build"   --extra-cflags="-m64
>         -I$HOME/ffmpeg_build/include"
>         --extra-ldflags="-L$HOME/ffmpeg_build/lib"  
>         --bindir="$HOME/bin" --extra-libs="-ldl" --enable-gpl
>         --enable-libmp3lame --enable-libx264 --enable-pic
>         When I link the avlibs in mine, with this command:
>         gcc -m64    -o mylib.so  -L../ffmpeg_build/lib
>         /home/uts/ffmpeg_build/lib/libavcodec.a -Wl,-R. -shared -s -fPIC
>         I always get this error:
>         /usr/bin/ld:
>         /home/uts/ffmpeg_build/lib/libavcodec.a(deinterlace.o):
>         relocation R_X86_64_PC32 against symbol `ff_pw_4' can not be
>         used when making a shared object; recompile with -fPIC
>         /usr/bin/ld: final link failed: Bad value
>         The same procedure on a x86 linux platform succeded.
>         This is the same problem experienced from Dayana in this mailing
>         list the 1st may 2013, I read the answers but they were not
>         helpful
>         Can you help me please?
>         thank you
>         Il 28/10/2013 12:37, Carl Eugen Hoyos ha scritto:
> 

Hi there,

I had a similar problem. I believe the cause and problem is explained in 
the following post:

http://cygwin.com/ml/binutils/2006-09/msg00149.html

I'm sure it is not the prettiest way to do it, but I used the above 
suggestion in the following patch worked for my scenario of linking static
ffmpeg libs into my own application shared dynamic lib.

It was painful to keep attempting a link to work out which items needed 
modifying but the end result worked like a charm. 

http://pastebin.com/ftSFPz23

Hope it might help someone else.
Nick




More information about the Libav-user mailing list