使用YASM构建x264:ASM检查失败

时间:2017-06-15 16:45:37

标签: linux ffmpeg x264 yasm

我的问题是,“我有新的yasm,我认为x264应该很酷,为什么x264不酷?”

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

今天我在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。

进行配置

这是出乎意料的。我有yasm,我理解为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

仍然给出了Found-no-assembler问题。作为最后一个混乱的假设,我明确告诉脚本我想要用于变量$ 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 drop-in取代了nasm不好吗?对于这个目的,yasm是否有用,但我没有向./configure提供正确的信息?我对CentOS构建ffmpeg的指示是否仅仅因为这个先决条件而过时了,我应该更加努力地获得一个现代的鼻子?

2 个答案:

答案 0 :(得分:3)

旧版x264以前默认使用yasm,新版本默认使用nasm。

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

此外,yasm最后于2014年发布,而nasm正在积极开发中。

答案 1 :(得分:0)

这对我来说适用于OSX。

您需要设置标志,例如

file.close();