所以我前段时间手动安装了最新的 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 中冲突的库文件,那么我的代码就可以编译,不会出错。但是,其他程序(例如电影播放器)会停止工作。解决这个问题的最佳方法是什么?
答案1
不确定这是否是最好的解决办法,但我刚刚补充道:
-L/usr/local/lib/
到我的链接器标志(在我为每个 opencv 添加库之后https://stackoverflow.com/a/15975490/229311),并有效地消除了错误。