Так что я вручную установил последнюю версию ffmpeg некоторое время назад, потому что одному из моих проектов нужны последние библиотеки .55 ffmpeg (я думаю, что я использовал это: https://trac.ffmpeg.org/wiki/UbuntuCompilationGuide ). Итак, теперь в / usr / local / lib у меня есть:
/usr/local/lib/libavcodec.a /usr/local/lib/libavcodec.so
/usr/local/lib/libavcodec.so.55 /usr/local/lib/libavcodec.so.55.38.101
Проблема в том, что в / usr / lib / x86_64-linux-gnu у меня есть:
/usr/lib/x86_64-linux-gnu/libavcodec.a /usr/lib/x86_64-linux-gnu/libavcodec.so.53
/usr/lib/x86_64-linux-gnu/libavcodec.so /usr/lib/x86_64-linux-gnu/libavcodec.so.53.35.0
Когда я компилирую свой код, я получаю эту ошибку компоновщика:
/usr/bin/ld: warning: libavcodec.so.55, needed by /usr/local/lib/libopencv_highgui.so, may conflict with libavcodec.so.53
/usr/bin/ld: obj/h264_decoder.o: undefined reference to symbol 'avcodec_free_frame@@LIBAVCODEC_55'
/usr/bin/ld: note: 'avcodec_free_frame@@LIBAVCODEC_55' is defined in DSO /usr/local/lib/libavcodec.so.55 so try adding it to the linker command line
/usr/local/lib/libavcodec.so.55: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
Если я избавлюсь от конфликтующих библиотечных файлов в / usr / lib / x86_64-linux-gnu, то мой код компилируется без ошибок. Однако тогда другие программы (например, Movie Player) перестают работать. Как лучше всего решить эту проблему?
Не уверен, что это лучшее решение, но я просто добавил:
-L/usr/local/lib/
к своим флагам компоновщика (сразу после того, как я включил библиотеки для opencv в https://stackoverflow.com / a / 15975490/229311 ), и это эффективно избавило от ошибки.