大块#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
文件。 - 手动修补。 对于修补程序中的每个块,尝试在
libdvdnav
find相应的文件和行,并根据修补程序中的说明进行更正。 - 采取版本的
libdvdnav
接近任何版本的.patch
文件的目的(可能是一个坏主意)。
debugging技巧
- 将crlf添加到补丁文件的末尾,并testing它是否可用
- 尝试使用–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,但是没有应用。