由于x264的開發平台不是windows,是以在Windows上用VC編譯器來編譯x264總是不能一次成功,現将在編譯過程中的常見錯誤總結如下,希望能節省初學者的時間。
x264在VC環境中的編譯指南下載下傳位址:x264源代碼(含VC編譯指南)
以下錯誤是在vc71下試驗的錯誤情況,vc6下會有稍許差别,但也類似。
[1] x264路徑帶空格
錯誤:
正在執行自定義生成步驟
nasm: error: more than one input file specified
type `nasm -h' for help
Project : error PRJ0019: 工具從"正在執行自定義生成步驟"
特征:
nasm出現錯誤
原因:
你的x264檔案夾的路徑中有空格,如下所示:
D:/program files/x264-051226
nasm.exe把空格前的字元串作為路徑,進而導緻了錯誤。
[2] nasm 未安裝
錯誤:
Assembly "../../common/i386/predict-a.asm"
'nasm' 不是内部或外部指令,也不是可運作的程式
或批處理檔案。
Error executing c:/windows/system32/cmd.exe.
特征:
'nasm' 不是内部或外部指令,也不是可運作的程式
原因:
沒有安裝nasm
解決:從本站下載下傳nasm.exe(098版本),拷貝到vc安裝目錄的bin檔案夾下就可以了。
[3] vc6沒有打更新檔
錯誤:
common.h(69) : fatal error C1600: unsupported data type
或
common.h:error c2485:'align':unrecognized externded attribute syntax error:'c'
特征:
資料類型不支援
原因:
vc6沒有安裝sp5或vcpp
[4] .c檔案按沒有包含到工程中
錯誤:
x264.obj : error LNK2019: 無法解析的外部符号 _mk_createWriter ,該符号在函數 _open_file_mkv 中被引用
x264.obj : error LNK2019: 無法解析的外部符号 _mk_addFrameData ,該符号在函數 _write_nalu_mkv 中被引用
x264.obj : error LNK2019: 無法解析的外部符号 _mk_startFrame ,該符号在函數 _write_nalu_mkv 中被引用
x264.obj : error LNK2019: 無法解析的外部符号 _mk_writeHeader ,該符号在函數 _write_header_mkv 中被引用
x264.obj : error LNK2019: 無法解析的外部符号 _mk_setFrameFlags ,該符号在函數 _set_eop_mkv 中被引用
x264.obj : error LNK2019: 無法解析的外部符号 _mk_close ,該符号在函數 _close_file_mkv 中被引用
特征:
link 錯誤,出現無法解析的外部符号。
原因:
.c檔案按沒有包含到工程中。這是因為x264的win32下的vc工程沒有和x264同步更新所緻,當x264加入了新的源檔案,而vc工程中沒有包含進來,就會有這樣的錯誤。像上例就是因為matroska.c沒有包含到工程中所緻。
Ps: .h檔案沒有包含的工程中,一般不會出錯,但建議還是包含進來,養成好習慣嘛。
[5] 安裝了intel編譯器(未試驗)
錯誤:
LINK : fatal error LNK1104: cannot open file "libm.lib"
Error executing link.exe.
特征:
libm.lib link 錯誤
原因:
可能是安裝了intel c++ complier
[6] .asm檔案沒有設定自定義編譯選項
錯誤:
libx264.lib(cpu.obj) : error LNK2019: 無法解析的外部符号 _x264_cpu_cpuid ,該符号在函數 _x264_cpu_detect 中被引用
libx264.lib(cpu.obj) : error LNK2019: 無法解析的外部符号 _x264_cpu_cpuid_test ,該符号在函數 _x264_cpu_detect 中被引用
libx264.lib(cpu.obj) : error LNK2019: 無法解析的外部符号 _x264_emms ,該符号在函數 _x264_cpu_restore 中被引用
特征:
容易和沒有包含.c檔案的錯誤混淆,其特征就是出現的外部符号都是彙編檔案中的。
原因:
每個.asm檔案都有自定義的編譯選項。
解決(針對本例):vc下,project setting,選中cpu-a.asm這個檔案,然後将其commands設定為:
nasm -f win32 -DPREFIX -o $(IntDir)/$(InputName).obj $(InputPath)
loading...