2017-06-15 28 views
1

我的问题在前面是“我有新的yasm,我认为x264应该很酷,那么为什么x264不酷?”使用YASM构建x264:未通过ASM检查

由于某些原因,我正在按照指南here构建一个包含从头开始ffmpeg构建的CentOS docker镜像(基于centos:latest)。这是一个很好的指导,之前它对我很有用,所以我对此感觉很好。

今天我打一个瓶颈上libx264构建点:具体地讲,我说

PKG_CONFIG_PATH="/tmp/ffmpeg_build/lib/pkgconfig" \ 
    ./configure \ 
    --prefix="/tmp/ffmpeg_build" \ 
    --bindir="/tmp/bin" \ 
    --enable-static 

而我得到的答复回来

发现没有汇编

最低版本是nasm-2.13

如果您确实想编译时不使用asm,请使用--disable-asm进行配置。

这是意想不到的。我有一个习惯,我的理解是:1)在那里做nasm做的事情,但更好,2)成为雏菊新鲜最现代的版本,因为我在一个小时前从它的回购中拉出它,并且构建它五十九分钟前。值得一提的是,自从指令要求之后,nasm也是在盒子上,但是它低于他们规定的版本(即它是“2014年6月9日编译的NASM版本2.10.07”)

所以看起来好像yasm不是被发现。还有另外一个StackExchange question提到了这个问题,它出现了一个路径问题。所以,我添加了yasm到我的路径,如下所示:

PATH=/tmp/ffmpeg_sources/yasm:$PATH \ 
    PKG_CONFIG_PATH="/tmp/ffmpeg_build/lib/pkgconfig" \ 
    ./configure 
    ...etc 

这还是给了发现 - 没有汇编问题。作为最后一个困惑的手段,我明确地告诉了脚本我想为变量$ AS使用什么,因为基于我对配置的快速浏览,看起来像yasm/nasm应该去的地方。该命令将变为:

AS=`which yasm` 
    PKG_CONFIG_PATH="/tmp/ffmpeg_build/lib/pkgconfig" \ 
    ./configure 
    ...etc 

这至少给了

找到YASM 1.3.0

最低版本NASM 2.13

如果你真的想不ASM编译,配置用--disable-asm。

看在我的config.log看到以下内容:

checking whether /tmp/bin/yasm supports vmovdqa32 [eax]{k1}{z}, zmm0... no 
Failed commandline was: 
-------------------------------------------------- 
/tmp/bin/yasm conftest.asm -I. -I$(SRCPATH) -DARCH_X86_64=1 -I$(SRCPATH)/common/x86/ -f elf64 -o conftest.o 
conftest.asm:1: error: instruction expected after label 
conftest.asm:1: warning: ignoring unrecognized character `{' 
conftest.asm:1: warning: ignoring unrecognized character `}' 
conftest.asm:1: warning: ignoring unrecognized character `{' 
conftest.asm:1: warning: ignoring unrecognized character `}' 
-------------------------------------------------- 
Failed program was: 
-------------------------------------------------- 
vmovdqa32 [eax]{k1}{z}, zmm0 
-------------------------------------------------- 

所以:这里有什么交易?我的假设是,yasm插入替换nasm不好? yasm是否适合这一目的,但我没有向./configure提供正确的信息?我的CentOS的ffmpeg指令是否已经过时了,而且我应该更努力地获得现代化的nasm?

回答

2

旧版本的x264用于默认使用yasm,新版本默认使用nasm。

您可以通过设置AS覆盖汇编程序,但是配置检查看起来与yasm不兼容的指令。

此外,yasm最近于2014年发布,正在积极开发之中。

+0

谢谢!我不明白,对yasm(而不是nasm)的默认是开发者的积极决定。 – radiofreemyourenji