最近在学习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给修复了.