【问题标题】:Building x264 with YASM: failing the ASM check使用 YASM 构建 x264:ASM 检查失败
【发布时间】:2017-11-18 06:15:54
【问题描述】:

我的问题是,“我有新的 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

我得到了回复

找不到汇编器

最低版本为 nasm-2.13

如果你真的想不使用 asm 编译,请使用 --disable-asm 进行配置。

这出乎意料。我有 yasm,我知道它是 1)在那里做 nasm 所做的事情,但更好,2)考虑到我大约一个小时前从它的 repo 中取出它,并建立它,成为最新鲜的最现代版本五十九分钟前。对于它的价值,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 使用什么,因为根据我对 configure 的快速了解,这看起来像是 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 的说明是否已经过时,我应该更加努力地获得现代 nasm?

【问题讨论】:

    标签: linux ffmpeg x264 yasm


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!我不明白默认使用 yasm(而不是 nasm)是开发人员的积极决定。
    • 我也遇到了同样的问题,你能帮我解决这个问题吗?
    【解决方案2】:

    这对我来说适用于 OSX。

    你需要设置类似的标志

    export ASFLAGS="-f macho64"
    export NASM="${OPT}/bin/nasm"
    export YASM="${OPT}/bin/yasm"
    export AS="${NASM}"
    

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多