vs2010编译x264

vs2010编译x264错误集锦

x264-snapshot-20091006-2245.tar 最后一个包含 vs工程的版本,用 vs2015 编译只需要修改 编号3地方的错误即可完成编译,用vs2010 编译会出错,原因vs2010部分支持c99,因此需要修改。下面列出出错的地方以及修改方法。.

需要修改好源码工程的到文档末尾链接去下载,(已经包含 yasm.exe,可vs2010 打开工程直接编译)

1、error C2143: syntax error : missing ‘;’ before ‘type’

-错误原因:MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
解决办法:在函数开头统一定义变量。
注:x264代码中有十几处类似的错误,没有具体数,只需一一改正过来就可以了。

2、error C2059: syntax error : ‘[‘

static const uint8_t check_mv_lists[X264_MBTYPE_MAX] = {[P_L0]=1, [B_L0_L0]=1, [B_L1_L1]=2};
改成
static const uint8_t check_mv_lists[X264_MBTYPE_MAX] ={0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,0,0,0};

3、error C2146: syntax error : missing ‘)’ before identifier ‘PRIx32’

fprintf( stderr, “Bad header magic (%”PRIx32” <=> %s)\n”,((uint32_t)header), header );
改成
fprintf( stderr, “Bad header magic (%ld %s)\n”, ((uint32_t)header), header );

4、error LNK2019: unresolved external symbol _x264_lookahead_init referenced in function _x264_encoder_open_76

这是由于libx264工程没有添加lookahead.c文件,从而缺少几个函数的定义造成的。
添加lookahead.c到libx264工程中Enc下。

5、error LNK2019: unresolved external symbol _log2f referenced in function _x264_analyse_init_costs

解决办法:重新定义一下log2f(x)即可,在osdep.h中添加log2f(x)定义,加入的代码如下:
#ifdef _MSC_VER
#define inline __inline
#define strcasecmp stricmp
#define strncasecmp strnicmp
#define snprintf _snprintf
#define fseek _fseeki64
#define ftell _ftelli64
#define isfinite _finite
#define strtok_r strtok_s
#define _CRT_SECURE_NO_DEPRECATE
#define X264_VERSION “” // no configure script for msvc**
//添加下面这一句

define log2f(x) (logf(x)*1.4426950408889634f)

endif

源码下载地址:
https://download.csdn.net/download/itbread/10506171

对错误不清楚的可以参考下面博客:
x264 代码分析参见
https://blog.csdn.net/leixiaohua1020/article/details/45960409

猜你喜欢

转载自blog.csdn.net/ITBread/article/details/80846766