[Libav-user] Compiling/linking on raspi fails to link to libav

Ingmar Rieger dev at irieger.net
Fri Mar 30 11:04:04 EEST 2018

Just a follow up if someone finds this thread with the same problem:
You have to put the includes into an extern "C" section like:
extern "C" {
     #include <libavformat/avformat.h>
     #include <libavcodec/avcodec.h>

     #include <libavutil/opt.h>
     #include <libavutil/imgutils.h>

Haven't a case where I needed extern "C" for includes as most libraries 
seem to put headers that need to be handled with classic C ABI inside 
those sections so it took some time to find this problem.


On 23.02.2018 09:03, Ingmar Rieger wrote:
> Hello,
> I'm building a small tool to run on a Raspberry Pi while I shoot 
> timelapses where I transfer the small JPG files shot besides my raw 
> files and use them for exposure checking and correction. As I already 
> have them on the raspi then I'd like to write a small preview movie clip 
> from them. Therefore I'd like to use libav/ffmpeg with the omx plugin 
> for hardware encoding giving it the images directly from ram as I 
> already have those JPG files open for exposure analyzing.
> To start playing with libav I just build a small app opening a bunch of 
> jpg files one after another and wanted to add libav encoding. For 
> starters I copied the encode function from the "encode_video.c" example 
> and tried to compile to check if includes and linking are working and 
> always end up not being able to link.
> My example file (main.cpp), the CMakeLists.txt for building it and my 
> compiler output is here:
> https://gist.github.com/irieger/f044f7920aec0b92dad29827b6fe7e79
> (My files are in /home/pi/dev/test/ffmpeg-encode (build in separate 
> directort /home/pi/dev/test/ffmpeg-encode/build) and ffmpeg is compiled 
> and installed from source with omx support with 
> PREFIX=/home/pi/bin/ffmpeg  [./configure --prefix=/home/pi/bin/ffmpeg 
> --enable-mmal --enable-omx --enable-omx-rpi --enable-shared --enable-pic])
> I searched for a while but I can't find a clue what's going wrong here. 
> Can anyone here hel me with this? Why will linking fail in this case? 
> Same result with `g++ -std=c++11 -Wall -I /home/pi/bin/ffmpeg/include -o 
> encode-test main.cpp -lOpenImageIO -L/home/pi/bin/ffmpeg/lib -lavformat 
> -lavcodec -lavutil -lswresample -lswscale`

Kind regards,

More information about the Libav-user mailing list