libav - 对 'av_frame_alloc' 等的未定义引用

libav - undefined reference to 'av_frame_alloc' and more

我正在尝试从 libav 文档编译本教程:link

我没有更改代码!

但是当我编译它时:

gcc test.c -lavformat -lswscale -lavdevice -lavformat -lavcodec -lavutil -lpthread -lm -o example

我收到这些错误:

undefined reference to `check_sample_fmt'
undefined reference to `select_sample_rate'
undefined reference to `select_channel_layout'
undefined reference to `av_frame_alloc'
undefined reference to `av_frame_free'

正在搜索 Dr.google 我读到它可能与库的链接顺序有关。但是我还没找到合适的呢?!

编辑: 这个'possible dublicate'好像和我的问题无关

ffmpeg 带有示例的 Makefile。我拿了这个,只是将它用于我的 libav 示例。 Link

您可能 运行 旧代码使用较新版本的 FFmpeg。 Ffmpeg 更改了一些函数名称,一些会创建一些贬值警告,而另一些则会创建错误。

根据官方Ffmpeg github

av_frame_alloc(), av_frame_unref() and av_frame_free() now can and should be 
used instead of avcodec_alloc_frame(), avcodec_get_frame_defaults() and avcodec_free_frame() respectively

这不适用于您的情况,但如果您尝试从 C++ 使用 ffmpeg,则会遇到类似的问题。

#include <libavcodec/avcodec.h>

int main() {
  av_frame_alloc();
}

不幸的是,ffmpeg headers 没有合适的 extern "C" { 包装器,所以你必须自己做。

extern "C" {
#include <libavcodec/avcodec.h>
}

int main() {
  av_frame_alloc();
}