我的问题是,“我有新的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的指示是否仅仅因为这个先决条件而过时了,我应该更加努力地获得一个现代的鼻子?
答案 0 :(得分:3)
旧版x264以前默认使用yasm,新版本默认使用nasm。
您可以通过设置AS覆盖汇编程序,但是配置检查看似与yasm不兼容的指令。
此外,yasm最后于2014年发布,而nasm正在积极开发中。
答案 1 :(得分:0)
这对我来说适用于OSX。
您需要设置标志,例如
file.close();