编译ffmpeg和opencv时出错

时间:2012-03-11 07:56:50

标签: ubuntu opencv ffmpeg

我正在尝试编译this example

在Ubuntu上。这是编译命令:

    g++ video.cpp -o video `pkg-config --cflags opencv` `pkg-config --libs opencv` -lpthread -lavutil -lavformat -lavcodec -lz

这就是我得到的错误:

     /usr/local/include/libavutil/common.h:173:47: error: ‘UINT64_C’ was not declared in this scope
     video.cpp: In member function ‘int FFread::init(char*)’:
     video.cpp:24:56: error: ‘av_open_input_file’ was not declared in this scope
     video.cpp:28:5: warning: ‘int av_find_stream_info(AVFormatContext*)’ is deprecated      (declared at /usr/local/include/libavformat/avformat.h:1266) [-Wdeprecated-declarations]
     video.cpp:28:35: warning: ‘int av_find_stream_info(AVFormatContext*)’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:1266) [-Wdeprecated-declarations]
     video.cpp:32:36: error: ‘dump_format’ was not declared in this scope
     video.cpp:37:48: error: ‘CODEC_TYPE_VIDEO’ was not declared in this scope

请指教。 谢谢, 内厄姆

3 个答案:

答案 0 :(得分:5)

参见libav faq.txi

@我在我的C ++应用程序中使用了Libav,但链接器抱怨缺少似乎可用的符号。

Libav是一个使用C99数学特性的纯C项目,以便启用C ++ 要使用它们,你必须将-D__STDC_CONSTANT_MACROS附加到你的CXXFLAGS

答案 1 :(得分:1)

您正在从C ++程序调用FFmpeg库。您是否将#include调用包装到

中的相关标头中
extern "C" { ... }

构建体?标头没有自动C ++支持。

修改

我阅读了链接的示例源代码;它做对了。

我认为问题是版本差异。这个例子超过2年,FFmpeg API继续发展。您可能必须自己升级API调用。

答案 2 :(得分:0)

据我记得,你应该用cmake来构建opencv。 cmake根据c编译器,库支持,线程库等检查您的环境,并自动在编译中设置一些标志。所以不要试图自己编译。只需按照此处http://opencv.willowgarage.com/wiki/InstallGuide_Linux

中的步骤操作即可