大块#1失败在1是什么意思?

运行make时出现以下错误,我不知道这意味着什么或者该怎么做。 任何人都可以照亮我或指向正确的方向吗?

 (cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch patching file Makefile.am Hunk #1 FAILED at 1. 1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej make: *** [dvdnav] Error 1 

我想交叉编译为Win32的VLC(使用Linux)。

这是由patch产生的错误。 如果你打开.patch文件,你会看到它被组织成一堆段,所谓的“hunk”。 每个大块在新旧版本中标识相应的代码段(按行号),这些代码段之间的差异以及它们之间的相似性(“上下文”)。

如果大块的相似性与原始文件中的相似性不匹配,则大块可能失败。 当你看到这个错误时,几乎总是因为你正在使用补丁来修补你正在修补的代码的错误版本。 有几种方法可以解决这个问题:

  • 获取已包含该修补程序(最佳选项)的libdvdnav的更新版本。
  • 获取您正在修补的libdvdnav版本的.patch文件。
  • 手动修补。 对于修补程序中的每个块,尝试在libdvdnavfind相应的文件和行,并根据修补程序中的说明进行更正。
  • 采取版本的libdvdnav接近任何版本的.patch文件的目的(可能是一个坏主意)。

debugging技巧

  1. 将crlf添加到补丁文件的末尾,并testing它是否可用
  2. 尝试使用–ignore-whitespace命令,如: markus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch请参阅markus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch 教程

当我没有在关联的git项目的顶部目录中应用该补丁时,我得到了“hunk失败”消息。 我正在使用该补丁(我创build它的地方)在一个子目录中。

看起来补丁可以从git项目中的子目录中创build,但是没有应用。