【发布时间】:2021-11-08 06:54:45
【问题描述】:
我已经被这个问题困扰了好几个星期了。
我正在尝试在支持 x264 的树莓派 4 上构建 opencv。为此,我需要包含 ffmpeg,并从源代码构建它。
但是,在编译 opencv 时,我一直收到这些链接器错误:
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.5.3: undefined reference to `avcodec_get_context_defaults3'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.5.3: undefined reference to `av_lockmgr_register'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.5.3: undefined reference to `av_register_all'
我是 Linux 新手,所以我不确定如何开始解决此问题。我相信我已经正确编译和安装了 ffmpeg。
这是我使用的步骤:
配置 ffmpeg:
sudo ./configure \
--prefix=/usr \
--extra-ldflags="-latomic" \
--enable-shared \
--extra-libs='-lpthread -lm' \
--ld=g++ \
--enable-gpl \
--disable-debug \
--enable-nonfree \
--enable-libx264 \
--enable-omx \
--enable-omx-rpi \
--enable-gnutls \
--enable-libfreetype \
--enable-libmp3lame
然后构建它: sudo make -j4
然后将其安装为一个包:(这样 opencv cmake 会检测到它)
sudo checkinstall -y --deldoc=yes --pkgversion=9999 --pkgname=ffmpeg
然后配置opencv(检测到ffmpeg)
sudo cmake ../opencv_sources -D CMAKE_BUILD_TYPE=RELEASE \
-D OPENCV_EXTRA_MODULES_PATH= $PWD/../opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D CMAKE_SHARED_LINKER_FLAGS='-latomic -L/usr/lib' \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D BUILD_EXAMPLES=OFF \
-D CPU_BASELINE=NATIVE \
-D CMAKE_INSTALL_PREFIX="$HOME/opencv_build" \
-D BUILD_opencv_apps=OFF \
-D BUILD_opencv_python2=OFF \
-D BUILD_SHARED_LIBS=ON \
-D WITH_FFMPEG=ON
然后构建opencv:
sudo make -j4
这就是我得到链接错误的地方。
我签入 /usr/lib 并且 .so 文件似乎在那里:
ls /usr/lib | grep libav
libavcodec.a
libavcodec.so
libavcodec.so.59
libavcodec.so.59.4.101
libavdevice.a
libavdevice.so
libavdevice.so.59
libavdevice.so.59.0.100
libavfilter.a
libavfilter.so
libavfilter.so.8
libavfilter.so.8.1.103
libavformat.a
libavformat.so
libavformat.so.59
libavformat.so.59.4.101
libavutil.a
libavutil.so
libavutil.so.57
libavutil.so.57.3.100
链接时如何检查opencv在哪里?有没有办法检查 ffmpeg 生成的共享库以确保它们正常工作?
ffmpeg版本为:git-2021-08-10-c245963
而opencv是4.5.3-dev
【问题讨论】:
-
这类问题多与需要的依赖有关。您可能在安装 opencv 之前没有安装依赖库。您可以查看this video 的描述部分并安装依赖项并重建opencv并重新安装它
-
@YunusTemurlenk 我同意,但我相信这种情况下的依赖是 ffmpeg,我也是从源代码编译的。我认为这是配置不正确、安装不正确或版本不兼容的某种组合,但我不知道如何排除故障。我在黑暗中拍摄了很长时间都无济于事。
标签: c++ opencv ffmpeg raspberry-pi raspbian