使用 YASM 构建 x264:ASM 检查失败
Building x264 with YASM: failing the ASM check
我的问题是,“我有新的 yasm,我认为 x264 应该很酷,为什么 x264 不酷?”
出于某些原因,我正在构建一个 CentOS docker 映像(基于 centos:latest),其中包含一个从头开始的 ffmpeg 构建,遵循指南 here。这是一个很好的指南,以前对我有用,所以我感觉很好。
今天我遇到了 libx264 构建点的瓶颈:具体来说,我说
PKG_CONFIG_PATH="/tmp/ffmpeg_build/lib/pkgconfig" \
./configure \
--prefix="/tmp/ffmpeg_build" \
--bindir="/tmp/bin" \
--enable-static
然后我收到回复
Found no assembler
Minimum version is nasm-2.13
If you really want to compile without asm, configure with --disable-asm.
这是出乎意料的。我有 yasm,据我所知,它是 1) 在那里做 nasm 做的事情但更好,以及 2) 是雏菊般新鲜的最现代版本,因为我大约一个小时前从它的回购中取出它,并在大约五十九分钟前建造了它。对于它的价值,nasm 也在盒子上,因为说明要求它,但它低于他们规定的版本(即它是“NASM 2014 年 6 月 9 日编译的版本 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
那至少给了
Found yasm 1.3.0
Minimum version is nasm-2.13
If you really want to compile without asm, configure with --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 的说明是否已经过时,我应该更加努力地获得现代 nasm?
旧版本的x264默认使用yasm,新版本默认使用nasm。
您可以通过设置 AS 覆盖汇编器,但是配置检查似乎与 yasm 不兼容的指令。
此外,yasm 最后一次发布是在 2014 年,而 nasm 正在积极开发中。
这对我有用OSX。
你需要像
这样设置标志
export ASFLAGS="-f macho64"
export NASM="${OPT}/bin/nasm"
export YASM="${OPT}/bin/yasm"
export AS="${NASM}"
我的问题是,“我有新的 yasm,我认为 x264 应该很酷,为什么 x264 不酷?”
出于某些原因,我正在构建一个 CentOS docker 映像(基于 centos:latest),其中包含一个从头开始的 ffmpeg 构建,遵循指南 here。这是一个很好的指南,以前对我有用,所以我感觉很好。
今天我遇到了 libx264 构建点的瓶颈:具体来说,我说
PKG_CONFIG_PATH="/tmp/ffmpeg_build/lib/pkgconfig" \
./configure \
--prefix="/tmp/ffmpeg_build" \
--bindir="/tmp/bin" \
--enable-static
然后我收到回复
Found no assembler
Minimum version is nasm-2.13
If you really want to compile without asm, configure with --disable-asm.
这是出乎意料的。我有 yasm,据我所知,它是 1) 在那里做 nasm 做的事情但更好,以及 2) 是雏菊般新鲜的最现代版本,因为我大约一个小时前从它的回购中取出它,并在大约五十九分钟前建造了它。对于它的价值,nasm 也在盒子上,因为说明要求它,但它低于他们规定的版本(即它是“NASM 2014 年 6 月 9 日编译的版本 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
那至少给了
Found yasm 1.3.0
Minimum version is nasm-2.13
If you really want to compile without asm, configure with --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 的说明是否已经过时,我应该更加努力地获得现代 nasm?
旧版本的x264默认使用yasm,新版本默认使用nasm。
您可以通过设置 AS 覆盖汇编器,但是配置检查似乎与 yasm 不兼容的指令。
此外,yasm 最后一次发布是在 2014 年,而 nasm 正在积极开发中。
这对我有用OSX。
你需要像
这样设置标志export ASFLAGS="-f macho64"
export NASM="${OPT}/bin/nasm"
export YASM="${OPT}/bin/yasm"
export AS="${NASM}"