ffmpeg函数调用失败--在编译自己的ffmpeg函数的时候显示ffmpeg函数undefined reference to `av_log_set_level(int)‘

本文档描述了在C++项目中使用ffmpeg库时遇到的链接错误,问题在于ffmpeg头文件未对C++进行兼容。通过检查库和代码,确认函数存在但链接时找不到。解决方案是通过在包含ffmpeg头文件时使用`extern C`来告诉编译器这些是C代码的头文件,从而成功解决链接问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cmake 脚本报错如下:

====================[ Build | ffmpeg_log | Debug ]==============================
/opt/clion-2020.2.4/bin/cmake/linux/bin/cmake --build /work/ffmpeg_doc/cmake-build-debug --target ffmpeg_log -- -j 6
Scanning dependencies of target ffmpeg_log
[ 50%] Building CXX object src/CMakeFiles/ffmpeg_log.dir/ffmpeg_log/ffmpeg_log.cpp.o
[100%] Linking CXX executable ffmpeg_log
/usr/bin/ld: CMakeFiles/ffmpeg_log.dir/ffmpeg_log/ffmpeg_log.cpp.o: in function `main':
/work/ffmpeg_doc/src/ffmpeg_log/ffmpeg_log.cpp:14: undefined reference to `av_log_set_level(int)'
/usr/bin/ld: /work/ffmpeg_doc/src/ffmpeg_log/ffmpeg_log.cpp:17: undefined reference to `av_log(void*, int, char const*, ...)'
collect2: error: ld returned 1 exit status
make[3]: *** [src/CMakeFiles/ffmpeg_log.dir/build.make:104:src/ffmpeg_log] 错误 1
make[2]: *** [CMakeFiles/Makefile2:114:src/CMakeFiles/ffmpeg_log.dir/all] 错误 2
make[1]: *** [CMakeFiles/Makefile2:121:src/CMakeFiles/ffmpeg_log.dir/rule] 错误 2
make: *** [Makefile:138:ffmpeg_log] 错误 2

使用nm工具查看库,看到库中是有对应的符号信息的
在这里插入图片描述
经过以上信息的确认,可以肯定如下:

  1. 库中肯定有对应的函数
  2. 链接时找不到
  3. 代码去掉对应函数的调用能正常运行
  4. 代码调用其他库能正常运行

经过以上的确认在看官方的给的FFmpeg的头文件吧,结果发现头文件上没有支持对C++代码的兼容,而本地使用的又是C++代码调用的,因此找不到对应的函数定义,一般的库都会加上extern "C"的,可能是ffmpeg对C的钟爱吧,根本没有考虑C++代码的调用
在这里插入图片描述

解决办法,告诉编译器这是个C代码的库的头文件,如下引用头文件就没有问题了:
在ffmpeg的头文件引用的时候加上extern “C”{}
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Achilles.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值