Hunk#1在1.失败这是什么意思?

Jel*_*Cat 57 makefile vlc cross-compiling

运行时出现以下错误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
Run Code Online (Sandbox Code Playgroud)

我正在尝试为win32交叉编译VLC(使用linux).

小智 63

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

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

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

  • 您的补丁采用[统一格式](http://en.wikipedia.org/wiki/Diff#Unified_format)。您可以忽略第二个“@@”后面的部分。在“@@”之间,有两个项:“-l,s”项表示块在块中的偏移量(“l”是行号)和大小(“s”是行数)原始文件,而“+l,s”表示修补后文件中的偏移量和大小。当有多个帅哥时,手动确定“+l,s”部分可能是一项相当大的工作。 (2认同)

And*_* DS 16

在某些情况下,文件版本没有区别,只是缩进、间距、行尾或行号不同。

尽管存在这些差异,但要修补,可以使用以下两个参数:

--ignore-whitespace :它忽略空白差异(缩进等)。

--fuzz 3 : “--fuzz X ”选项将最大模糊因子设置为行。此选项仅适用于上下文和统一差异;它在寻找安装大块头的地方时最多忽略X行。请注意,较大的模糊因子会增加制作错误补丁的几率。默认模糊因子为 2;将其设置为超过 diff 中上下文的行数(通常为 3)是没有意义的。

不要忘记用户“--dry-run”:它会尝试不应用补丁。

例子 :

patch --verbose --dry-run --ignore-whitespace --fuzz 3 < /path/to/patch.patch
Run Code Online (Sandbox Code Playgroud)

有关 Fuzz 的更多信息:

https://www.gnu.org/software/diffutils/manual/html_node/Inexact.html


小智 5

调试技巧

  1. 在补丁文件末尾添加crlf并测试是否有效
  2. 尝试使用 --ignore-whitespace 命令,如下所示: markus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch 请参阅markus 的教程