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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章