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没有安装sp5vcpp

 

 

[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文件按没有包含到工程中。这是因为x264win32下的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)

 

转自: 中华视频网

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(音视频编程)