一、问题

        编译 FFmpeg 项目时遇到链接报错,collect2: error: ld returned 1 exit status,如图:

/usr/bin/ld: CMakeFiles/yolo_cpp_multi.dir/src/reader/FFmpegReader.cpp.o: in function `FFmpegReader::~FFmpegReader()':
/home/orangepi/airockchip/application/yolov5/cpp_muti_v2/src/reader/FFmpegReader.cpp:28: undefined reference to `av_frame_free(AVFrame**)'
/usr/bin/ld: /home/orangepi/airockchip/application/yolov5/cpp_muti_v2/src/reader/FFmpegReader.cpp:30: undefined reference to `av_packet_free(AVPacket**)'
/usr/bin/ld: /home/orangepi/airockchip/application/yolov5/cpp_muti_v2/src/reader/FFmpegReader.cpp:32: undefined reference to `avcodec_free_context(AVCodecContext**)'

二、检查库和头文件

        确认动态库都存在,并且CMake配置也没问题,对应的库也使用

nm -D /usr/lib/x86_64-linux-gnu/libavutil.so | grep av_frame_free

查看了链接,也是正确的。

        最后检查了头文件的导入,由于项目使用 C++,所以查询了其他项目的 FFmpeg 导入方式,发现需要加上 extern "C" 进行申明:

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

重新编译就成功了。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐