usr/bin/ld链接报错undefined reference `av_frame_free(AVFrame**)‘等ffmpeg库报错

发布于:2025-08-05 ⋅ 阅读:(11) ⋅ 点赞:(0)

明明在CMakeLists.txt配置了ffmpeg库,还是链接一直报错:

usr/bin/ld: video_processor/libvideo_processor_lib.a(video_processor.cpp.o): in function `VideoProcessor::run()':
video_processor.cpp:(.text+0x17db): undefined reference to `av_frame_free(AVFrame**)'
/usr/bin/ld: video_processor.cpp:(.text+0x1842): undefined reference to `av_frame_free(AVFrame**)'
/usr/bin/ld: video_processor.cpp:(.text+0x1856): undefined reference to `av_frame_free(AVFrame**)'
/usr/bin/ld: ffmpeg_handler/libffmpeg_handler_lib.a(ffmpeg_handler.cpp.o): in function `FFmpegHandler::cleanupReader()':
ffmpeg_handler.cpp:(.text+0x1b5): undefined reference to `avcodec_free_context(AVCodecContext**)'
/usr/bin/ld: ffmpeg_handler.cpp:(.text+0x1d9): undefined reference to `avformat_close_input(AVFormatContext**)'
/usr/bin/ld: ffmpeg_handler.cpp:(.text+0x201): undefined reference to `av_frame_free(AVFrame**)'
/usr/bin/ld: ffmpeg_handler.cpp:(.text+0x22a): undefined reference to `av_packet_free(AVPacket**)'

最可能的原因是库的链接顺序错误,按avformat → avcodec → swscale → avutil的顺序重新配置后,再检查头文件包含和函数调用参数,即可解决链接错误。

ffmpeg.cpp不能配置

extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavcodec/packet.h>
#include <libswscale/swscale.h>
#include <libavutil/opt.h>
#include <libavutil/frame.h> 
#include <libavutil/imgutils.h>
}

只能放在ffmpeg.h中


网站公告

今日签到

点亮在社区的每一天
去签到