我正在尝试编译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
请指教。 谢谢, 内厄姆
答案 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
中的步骤操作即可