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();
}
我正在尝试从 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();
}