ffmpeg学习发现av_err2str使用报错问题

在学习ffmpeg并尝试在Windows的VS2015环境下运行代码时,遇到了av_err2str宏错误。问题源于av_error变量在多个源文件中重复定义。通过在变量前添加static关键字解决了冲突,同时提供了预编译条件来区分MSVC和GCC的编译环境。作者建议ffmpeg项目可能需要修复此潜在问题。
摘要由CSDN通过智能技术生成

最近在学习ffmpeg,照着书上敲代码,发现有个av_err2str错误.书上环境是linux系统的,我使用的windows系统编译器使用的是VS2015.可能是微软的编译器和GCC编译器不太一样这个宏函数用不了.

 会报这个错误.

网上找资料超级少,找到一个类似的按照上面修改ffmpeg代码.上面的错误没有了会有新的错误.

ffmpeg错误总结_av_err2str_挥手致何意的博客-CSDN博客

修改完以后编译会报这个错误:

 

说av_error已经存在,但是实际上是不存在的, 我想应该是上面的那个变量char av_error[AV_ERROR_MAX_STRING_SIZE] = { 0 };定义在头文件里了.每个源文件添加一次头文件,这个变量就会新建一个,所以编译就会出现这个问题.

其实最简单的解决方法就是在这个变量前添加static

static char av_error[AV_ERROR_MAX_STRING_SIZE] = { 0 };

这么定义就可以了.因为static是静态的存储位置在静态空间,不在栈空间,而且只在本文件中可见.所以就可以了.为了实现兼容性,可以使用预编译

#if defined(_MSC_VER)
static char av_error[AV_ERROR_MAX_STRING_SIZE] = { 0 };
#define av_err2str(errnum) \
    av_make_error_string(av_error, AV_ERROR_MAX_STRING_SIZE, errnum)
#elif
#define av_err2str(errnum) \
    av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
#endif

如果是使用VS就使用上面的代码,linux GCC可以使用下面的代码,不清楚为什么ffmpeg维护人员没有发现这个bug,我要是提交这个代码也不知道会不会被采用.

时间:2023.04.22

FFmpeg 当前版本:         Version: 5.1.2-full_build-www.gyan.dev

希望以后的版本会把这个bug给修复了.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

波雅_汉库克

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

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

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

打赏作者

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

抵扣说明:

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

余额充值