天天看點

ZZ x264在VC環境編譯出錯原因分析

由于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...

繼續閱讀