【问题标题】:Error in installing Open-CV with ffmpeg使用 ffmpeg 安装 Open-CV 时出错
【发布时间】:2012-02-04 23:30:11
【问题描述】:

我正在尝试安装在 Ubuntu 11.04 上运行的 Open-CV 库。

我遵循了InstallationGuide 中的所有说明。

但是在安装成功后,我意识到我没有 FFMPEG 支持,因为在我的配置文件中 FFMPEG 被禁用:

Video I/O: 
--     DC1394 1.x:                 NO 
--     DC1394 2.x:                 YES 
--     FFMPEG:                     NO 
--       codec:                    YES 
--       format:                   YES 
--       util:                     YES 
--       swscale:                  NO 
--       gentoo-style:             YES 
--     GStreamer:                  YES 
--     UniCap:                     NO 
--     PvAPI:                      NO 
--     V4L/V4L2:                   Using libv4l 
--     Xine:                       NO

所以我尝试在安装 FFMEPG 后重建所有内容,如 here 所述。

按照说明配置安装后

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ../OpenCV-2.3.1

我运行 make 命令得到了这个错误:

make[2]: *** [bin/opencv_test_calib3d] Error 1
make[1]: *** [modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/all] Error 2
make: *** [all] Error 2

这是出现错误的编译点:

Linking CXX executable ../../bin/opencv_test_calib3d
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_analysis_headerout'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_out_samplerate'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_disable_reservoir'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_encode_buffer'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vaUnmapBuffer'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vaDestroyBuffer'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_comment_clear'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_param_default'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_param_apply_profile'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_brate'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_encoder_headers'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `faacEncGetCurrentConfiguration'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_analysis_blockout'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_info_clear'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_analysis_buffer'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_comment_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vaCreateBuffer'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_bWriteVbrTag'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `faacEncSetConfiguration'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_encode_ctl'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `D_IF_decode'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `faacEncGetDecoderSpecificInfo'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_block_clear'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_close'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_encoder_encode'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_VBR'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `Encoder_Interface_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_analysis'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_get_framesize'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `faacEncOpen'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_encode_packetout'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_quality'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `Decoder_Interface_exit'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_encode_alloc'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_encode_setup_vbr'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_info_clear'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_in_samplerate'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_encoder_reconfig'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_param_apply_fastfirstpass'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_VBR_quality'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_mode'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `D_IF_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_set_num_channels'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `faacEncEncode'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_encode_setup_managed'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `Encoder_Interface_exit'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `Decoder_Interface_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vaRenderPicture'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_encode_ctl'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_info_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_analysis_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_encoder_delayed_frames'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_param_parse'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_encode_free'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `D_IF_exit'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_dsp_clear'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `Decoder_Interface_Decode'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vaMapBuffer'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_block_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_bit_depth'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_picture_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_encoder_close'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_encoder_open_120'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `faacEncClose'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vaEndPicture'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_encode_flush'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_encode_buffer_interleaved'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_comment_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_comment_clear'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_init_params'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `x264_param_default_preset'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_encode_setup_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_bitrate_addblock'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_comment_add_tag'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_encode_flushheader'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `lame_encode_buffer_int'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `th_encode_ycbcr_in'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_bitrate_flushpacket'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_analysis_wrote'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vorbis_info_init'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `Encoder_Interface_Encode'
../../lib/libopencv_highgui.so.2.3.1: undefined reference to `vaBeginPicture'
collect2: ld returned 1 exit status

谁能告诉我安装过程有什么问题?

为什么会出现这个库引用错误?

【问题讨论】:

    标签: c opencv ffmpeg makefile cmake


    【解决方案1】:

    这些错误来自链接过程,它们通常意味着您的系统上缺少某些库,或者它们位于构建过程未搜索的位置。

    我建议你谷歌这些符号来知道你需要安装哪些包。

    编辑:

    总结我们私下的谈话,主要问题是 x264 是静态构建的。 必须使用--enable-shared 构建库的共享版本。 OP 建议在所有配置选项中添加--prefix=/usr/local

    【讨论】:

    • 谷歌搜索没有多大帮助,我发现了另一个链接错误,但由于另一个问题 (code.ros.org/trac/opencv/ticket/1077)。你能帮我理解为什么构建过程没有找到它正在寻找的库吗?我应该更新一些环境变量吗?还有其他想法吗?非常感谢!
    • 也许我应该在/etc/ld.so.conf.d 中添加一个文件以指定我安装的x264 和ffmpeg 库的路径?
    • 安装ffmpeg后执行cmake时,你能在输出文本中看到它确实找到了ffmpeg吗?另外在 Google 上的快速搜索显示,其中一些符号包含在包 libmp3lame0 中,你安装了吗?
    • 是的,这是我的 apt-get 输出:libmp3lame0 is already the newest version.
    • 这些软件包怎么样:libmp3lame-devlibvorbis-devlibfaac-dev?它们应该安装在/usr/lib!另外,我认为您需要在 x264 源目录中执行sudo make install,因为您已经手动编译了它,否则它不会安装在系统上。如果您不这样做,则需要将 x264 .so 路径添加到 LD_LIBRADY_PATH。 但最重要的事情之一是确保您可以在 cmd-line 上使用 ffmpeg 并且它可以工作。检查Using FFmpeg and x264部分下的cmds。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多