2008年12月18日星期四

在VC2003中编译x264

1、到 http://www.videolan.org/developers/x264.html
下载 x264 源代码,可以从代码库中取:
# git clone git://git.videolan.org/x264.git
或者下载一个 daily snaptshot,这是每天凌晨生成的一个tar.gz文件,例如:
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20081217-2245.tar.bz2

2、用VC2003打开 x264\build\win32\x264.sln 文件,会显示有2个工程:
libx264
x264

3、编译会显示找不到 yasm,显然 x264工程用了一个开源的汇编编译器 yasm,其网址是:
http://www.tortall.net/projects/yasm/下载win32版本:
http://www.tortall.net/projects/yasm/releases/yasm-0.7.2-win32.exe将其改名为 yasm.exe 并放到 PATH 路径中,例如 C:\tools

4、再次编译,会报2个错,一个出在 #define ERROR(...),这是因为 VC2003 不支持可变参数的宏函数,得 VC2005 以上才支持,所以这里需要修改为:
#if defined(_MSC_VER) && _MSC_VER < 1400 // Support for variadic macros was introduced in Visual C++ 2005.
#define ERROR { ret = 1; }
#else
#define ERROR(...)\
{\
if( verbose )\
x264_log( h, X264_LOG_WARNING, __VA_ARGS__ );\
ret = 1;\
}
#endif

另一个错在编译不会有问题,但是link的时候可能会报错,说 _fseeki64 和 _ftelli64 找不到,这两个函数支持 64bit 文件访问,但是在 VC2005 以后才支持,所以需要在 osdep.h 中进行修改为:
#if _MSC_VER >= 1400 // _fseeki64 and _ftelli64 introduced in VC2005 and above
#define fseek _fseeki64
#define ftell _ftelli64
#endif

然后再进行编译就可以了,编译完成之后,在 x264\bin\ 下面生成2个文件:
libx264.lib
x264.exe

没有评论: