编译安装ffmpeg+OpenCV的时候的注意点

/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

近日有需要编译安装带视频功能的OpenCV,需要先编译安装ffmpeg后再编译安装OpenCV。

遇到了两个问题记录下来以防未来再次踩坑。


OpenCV找不到ffmpeg

这个问题的原因视具体情况而定。我的问题是在编译ffmpeg时没有安装pkg-config,此时configure的时候还甩了一条warning。此时只需要安装pkg-config

sudo apt install pkg-config

再重新configure和make install即可。


OpenCV video链接错误

其实就是下面这个链接问题

/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

有可能是由于ffmpeg默认是编译为静态库,而OpenCV默认是编译为动态库,动态库重复链接静态库后产生了一些符号问题。解决方案是在OpenCV链接时加上-Wl,-Bsymbolic参数,这个参数告诉链接器遇到重名符号时优先链接本地符号。可以在cmake OPENCV的时候使用

cmake .. -DCMAKE_SHARED_LINKER_FLAGS=-Wl,-Bsymbolic

然后重新编译OpenCV即可。

称谓(*)
邮箱
留言(*)