Mingw下gcc4.5.0编译新版ffmpeg的问题

来源:互联网 发布:sql server 自增长字段 编辑:程序博客网 时间:2024/06/01 11:23

下载了今年8月份的ffmpeg的源码后,在Mingw下编译。ffmpeg警告gcc版本过老,造成栈不对齐,可能存在问题。建议用gcc4.2以上版本。于是下载了最近的稳定版gcc4.5.0进行编译。然而编译不过,出现错误:strcasecmp声明不确切。
在头文件中定义(libavutil/avstring.h) #define strcasecmp stricmp
问题依旧。
于是自己实现了两个函数。
static inline char __hack_charget( char c )
{
if(c >= 'a' && c <= 'z')
c += 'A' - 'a';
return c;
}

static inline int hack_strcasecmp( char const *a, char const *b )
{
char ac, bc;
int r;
for(;;) {
ac = __hack_charget(*a++);
bc = __hack_charget(*b++);
r = (int)ac - (int)bc;
if(r)
return r;

if(!ac)
return 0;
}
}

static inline int hack_strncasecmp( char const *a, char const *b, int n )
{
char ac, bc;
int r, i;

for(i = 0; i < n; ++i) {
ac = __hack_charget(*a++);
bc = __hack_charget(*b++);
r = (int)ac - (int)bc;
if(r)
return r;

if(!ac)
return 0;
}
return 0;
}

#define strcasecmp hack_strcasecmp
#define strncasecmp hack_strncasecmp

将这个文件include进avstring.h和metadata.h中,问题解决。测试后,结果正确。

我google过这个问题,有些老外卡在这里,正在四处询问。

总结:
即使是公布的gcc和ffmpeg也会存在这种比较低级的问题,毕竟是有源代码,见到问题解决问题就行了。

原创粉丝点击