# OpenCV 3.0 won't compile with FFMPEG support?

I would like to use the ffmpeg library so I have video support with my OpenCV 3.0 build. I'm using the excellent step-by-step instructions from the book Practical OpenCV by Samarth Brahmbhatt (http://www.it-ebooks.info/book/3145/) But every time I run make, the build quits while trying to link libopencv_videoio.so, and throws this error:

/usr/bin/ld: /usr/local/lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol ff_pw_9' can not be used when making a shared object; recompile with -fPIC

First, there was actually some similar error, and I fixed it by recompiling x264 with the additional option --enable-pic. That was easy.

But I've recompiled ffmpeg a bunch of times, with the options --extra-cflags=-fPIC, --extra-cxxflags=-fPIC, --enable-pic, and nearly every combination of those options. Nothing will make this work.

I don't have any problem following the same steps with OpenCV 2.4.9.

Help!

edit retag close merge delete

Any reason why you want ffmpeg explicitly? It has been replaced by libav on newer linux systems :)

( 2015-06-07 04:25:12 -0500 )edit
1

Really? I suppose I'm not too concerned where my video support comes from... I just wanted video support and I had instructions for how to make ffmpeg work. I actually solved the question before I asked it, only I wasn't able to answer immediately due to new-user restrictions.

Do you have instructions for setting up opencv with libav, or is it just an option in ccmake and it "just works"?

( 2015-06-08 20:26:44 -0500 )edit
1

Just a compile option yes :) libav is pretty much preinstalled on linux systems

( 2015-06-09 02:44:53 -0500 )edit
1

Thanks for the tip!

( 2015-06-09 09:12:50 -0500 )edit

Ok, so I again have a need to compile opencv with video support, but I do not see a WITH_AV option or anything that looks like that when I run ccmake .., am I missing something?

( 2015-09-01 12:46:50 -0500 )edit

It is still the flag WITH_FFMPEG but under the hood this has been changed by libav in Linux distributions.

( 2015-09-02 07:35:33 -0500 )edit

Sort by » oldest newest most voted

Another option is to simply build ffmpeg as a shared library (pass --enable-shared --disable-static to configure) which removes the need for fPIC.

more

I like this, it is simpler.

( 2016-04-22 15:54:02 -0500 )edit

Ah, great question Rex. I had the same exact problem, myself!

I tried all the same things you did actually. I finally found the answer by googling "ffmpeg --enable-pic", which led me to the ffmpeg website on advanced linking configuration (http://www.ffmpeg.org/platform.html#A...). It turns out my problem was two-fold: I needed to change how I was compiling ffmpeg, and how I was linking OpenCV

The short answer is, I recompiled ffmpeg with additional flags --enable-pic and --extra-ldexeflags=-pie, and then had to edit a particular option in my OpenCV build. I used ccmake to set CMAKE_SHARED_LINKER_FLAGS to a value of -Wl,-Bsymbolic`, as described by the ffmpeg website.

Hopefully this helps you out, Rex. Best of luck!

Ok but seriously, this took me a while to find the answer, so hopefully this will help save somebody a couple hours of pain.

more

Can you elaborate this part a little ".. and then had to edit a particular option in my OpenCV build. I used ccmake to set CMAKE_SHARED_LINKER_FLAGS to a value of -Wl,-Bsymbolic, as described by the ffmpeg website." Which option did you edit particularly ? In my case OpenCV is picking up an older version of FFMPEG (libavcodec -54.35 instead of 56.1...) is there some setting to force OpenCV to force using another version ?

( 2015-06-11 07:43:17 -0500 )edit

Official site

GitHub

Wiki

Documentation