OpenCV 3.0.0编译FFMPEG时出现错误

5

我已经使用OpenCV一段时间了。然而,最近我将我的系统改为一个集群,我没有任何管理员权限。问题就是这样的:

在我的主目录中,我安装了FFMPEG(ffmpeg网站上提供的最新稳定版本)。我将其安装在$HOME中,所以在$HOME/lib中安装了库文件。为了获得更多信息,我编译了FFMPEG并使用了以下选项:

./configure --prefix=$HOME --enable-shared --enable-pic

我随后下载了最新稳定版的OpenCV 3.0.0,并使用ccmake进行了配置。当我尝试执行make -j8时,出现以下错误。
 Scanning dependencies of target opencv_videoio
[ 63%] [ 63%] [ 63%] [ 63%] [ 63%] [ 63%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_decoder.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_images.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_v4l.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_encoder.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o
In file included from /home/uujjwal/libraries/opencv-nogpu/opencv-3.0.0/modules/videoio/src/cap_ffmpeg.cpp:45:0:
/home/uujjwal/libraries/opencv-nogpu/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1546:71: error: use of enum 'AVCodecID' without previous declaration
/home/uujjwal/libraries/opencv-nogpu/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1556:83: error: use of enum 'AVCodecID' without previous declaration
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....

然而,没有ffmpeg支持它可以正常工作。但是由于我的工作性质,我需要ffmpeg支持。
为了解决这个问题,我尝试安装OpenCV 2.4.11,但它也出现了这个错误。最新的GIT版本没有给我这个错误,但是出现了一个错误,其中一部分如下所示。
Linking CXX shared library ../../lib/libopencv_highgui.so /usr/bin/ld: /home/matheus/ffmpeg_build/lib/../lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used

我从另一个未解决的在线问题中复制了上述错误,因此文件夹名称不同,但重定位错误完全相同。

为了解决这个问题,我搜索并找到了以下链接 http://answers.opencv.org/question/12597/build-problems-for-opencv-241-with-ubuntu-1204-lts/

然而,那里的一个答案提到需要更改cap_ffmpeg_impl.hpp文件中的一些行。我尝试这样做,但要么我做错了,要么其他问题出现了,它没有起作用。确切的行号和更改内容没有被提及,所以我很难修改并确定。

我正在使用 Fedora 19(薛定谔的猫)作为操作系统,我希望我的问题细节清晰,并希望社区能给我一个好的回应。

问候 Ujjwal


@Ujjawl,你在找到的链接中的建议(将CodecID更改为AVCodecID)可能会在你的情况下导致更多错误。请看下面的解决方案;我曾经遇到过和你一样的问题。 - Ulrich Stern
哦,好的。我一回到实验室就会试一下。 - Ujjwal Aryan
3个回答

10

我也遇到了这个问题,试图在Ubuntu 12.04上构建OpenCV 3.0.0。这个问题似乎是OpenCV的一个bug。我编辑了opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp,在所有地方将AVCodecID替换为CV_CODEC_ID,除了#define - 在第1174行(可选)、1546行和1556行 - 然后编译成功了。

更多详情请参见我在OpenCV问题跟踪器上的帖子。在我的帖子之前,这个漏洞已经在OpenCV主分支中修复,作为提交的一部分。


我不得不在Ubuntu 15.10上使用OpenCV 3.0.0来完成这个任务,所以可能并没有完全解决。 - Matt
@Matt,主分支上的修复还没有“发布”。3.0.0版本存在此问题,但下一个版本可能就不会有了。 - Ulrich Stern

1
假设您没有在OpenCV中使用FFMPEG,您可以禁用它的编译:
当您运行Cmake时,即当您执行以下操作时:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D PYTHON2_PACKAGES_PATH=~/.virtualenvs/cv/lib/python2.7/site-packages \
    -D PYTHON2_LIBRARY=/usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7/bin \
    -D PYTHON2_INCLUDE_DIR=/usr/local/Frameworks/Python.framework/Headers \
    -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..

将此标记添加到编译选项中-DWITH_FFMPEG=0,以不编译FFMPEG部分。

0

此版本支持ffmpeg

conda install --channel conda-forge

什么是 conda - ar2015

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接