最近在编译ffmpeg时,发现x265的一个bug,记录一下
我使用的x265是1.2 stable,修订版本7246,在编译完x265后将其添加到ffmpeg过程中,在ffmpeg的configure这一步始终不能检测通过,每次都是报x265找不到
首先出现的问题是找不到x265的库文件,提示需要pkg-config,这个好解决
1)下载pkg-config并编译安装,然后再configure前指明PKG_CONFIG_PATH到x265安装目录i下的lib目录下的pkgconfig目录
2)在configure选项中--extra-cflags中用-I引入x265的include目录,
3)在configure选项中--extra-ldflags用-L引入x265的lib目录
通过以上方法可以解决ffmpeg找不到x265库的问题
接下来要解决C++编译问题,由于x265是C++库,因此在ffmpeg的configure,因此configure需要有--extra-libs=-lstdc++选项
再次congfigure,这次在测试时链接x265库出现了找不到x265_stack_align的错误,导致configure失败,
查了下源码,发现该函数是在x265的common/common.h中定义的,源码如下
#if X265_ARCH_X86 && !defined(X86_64))
extern "C" intptr_t x265_stack_align(void (*func)(), ...);
#define x265_stack_align(func, ...) x265_stack_align((void (*)())func, __VA_ARGS__)
#else
#define x265_stack_align(func, ...) func(__VA_ARGS__)
#endif
由于windows下只能采用mingw编译ffmpeg,因此x265我也是采用mingw编译的,那么问题就出来了,似乎x265对mingw32编译的情况没有考虑周全,这里会把x265_stack_align的定义搞错,因此需要将
#if X265_ARCH_X86 && !defined(X86_64))
改为
#if X265_ARCH_X86 && !defined(X86_64) && !defined(__MINGW32__)
重新编译x265,之后ffmpeg的编译就没有问题了