【问题标题】:Compiling FFMPEG for Kali Linux 2为 Kali Linux 2 编译 FFMPEG
【发布时间】:2016-04-26 03:09:22
【问题描述】:

我正在尝试将 FFMPEG 安装到 Kali Linux 2.0 到目前为止,我一直在尝试使用以下命令:

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure
make
make install

但是,当我尝试制作它时,出现以下错误:

libavcodec/x86/imdct36.asm:393: error: operation size not specified
library.mak:30: recipe for target 'libavcodec/x86/imdct36.o' failed
make: *** [libavcodec/x86/imdct36.o] Error 1

我真的很困惑如何解决这个问题,因为我的技能只是中等......

【问题讨论】:

  • 您的屏幕截图难以辨认,在 S.O.当从您的终端简单地复制/粘贴到您的 Q 中时,包括此类项目将产生可读和可搜索的内容(专家查找某些短语并使用其浏览器的搜索功能)。请用您问题的纯文本编辑您的 Q,使用编辑框左上角突出显示的文本上的{} 工具来保持代码/数据/errMsgs/等的正确格式。祝你好运。
  • 谢谢,我希望现在可以接受。
  • 这个问题上的欺骗标志非常具有误导性。

标签: linux unix assembly ffmpeg


【解决方案1】:

我偶然发现了答案,但是 我需要在编译之前安装 YASM...

apt-get install yasm

【讨论】:

  • configure 脚本测试是否存在 yasm,如果它不存在但 nasm 存在,它会将 Makefile 设置为使用 nasm。但是汇编语言显然是 nasm 不能接受的。
【解决方案2】:

由于源代码中包含大量宏,因此需要对这个特殊问题进行大量跟踪。第 393 行内容如下:

DEFINE_IMDCT

寻找那个宏,我们在第 179 行找到它。但它里面有很多指令和条件,其中任何一个都可能是罪魁祸首。所以首先我们要做的是make V=1 打开详细(正常)GNU make 输出。然后我们看到:

jcomeau@aspire:~/rentacoder/jcomeau/floureon/ffmpeg$ nasm -f elf -DPIC -g -F dwarf -I./ -I.// -Pconfig.asm -I libavcodec/x86/ -o libavcodec/x86/imdct36.o libavcodec/x86/imdct36.asm

我们将其更改为:

jcomeau@aspire:~/rentacoder/jcomeau/floureon/ffmpeg$ nasm -l /tmp/imdct36.lst -f elf -DPIC -g -F dwarf -I./ -I.// -Pconfig.asm -I libavcodec/x86/ -o libavcodec/x86/imdct36.o libavcodec/x86/imdct36.asm

获取列表文件。查看 operation size not specified 错误的列表,我们在第 102741 行找到它,位于宏扩展的 <4> 级别。向上滚动,我们发现第 102668 行的第 2 级指令为extractps [%3 + %4], %1, 1,第 102583 行的第 1 级指令为STORE m6, m7, outq + 16*SBLIMIT, 4*SBLIMIT

于是我们回到libavcodec/x86/imdct36.asm,搜索STORE,在第145行找到。果然在它下面找到了3条extractps指令:

extractps [%3 +   %4], %1, 1
extractps [%3 + 2*%4], %1, 2
extractps [%3 + 3*%4], %1, 3

我们将它们更改为:

extractps dword [%3 +   %4], %1, 1
extractps dword [%3 + 2*%4], %1, 2
extractps dword [%3 + 3*%4], %1, 3

假设 32 位操作数。果然,在那之后它完成了构建,而无需安装yasm

我怎么知道它不应该是qword?我没有,但这没有意义,因为extractps 只使用 32 位目标:“在 imm8 指定的源偏移量处从 xmm2 中提取单精度浮点值并将结果存储到 reg 或 m32 . 如果 reg 为 r64,则 r64 的高 32 位为零。 (http://www.felixcloutier.com/x86/EXTRACTPS.html)。

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 1970-01-01
    • 2014-07-08
    • 2014-11-23
    • 1970-01-01
    • 2011-10-23
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多