Answers:
修补程序通常包含在.diff
文件中,因为修补程序是使用diff
命令创建的。
补丁是对源代码的一系列插入和删除。因此,为了使用补丁,必须在应用补丁后从源代码构建应用程序(例如,“ foobar”)。因此,分步进行:
1.获取foobar的源包。
大多数Linux发行版(nb修补程序不是Linux独有的)都可以使用“源程序包”来实现此目的,但是由于它们是异类的,因此在这里我仅引用原始源程序的格式。原始来源不是发行版的一部分,可能很难找到。Wikipedia是一个很好的起点,它提供了许多流行应用程序的文章,并且该文章应包含带有源代码下载的首页链接。显然,您也可以使用Google自己。源程序包将称为foobar.0.1.tar.bz2
。解压缩该文件-您现在有一个名为的目录foobar.0.1
。
2.添加补丁。
有时补丁是单个文件,有时它们是多个文件的集合。将它们复制到foobar.0.1
和中cd foobar.0.1
。接下来,您需要运行patch
命令。这是从标准输入中读取的,因此您希望通过管道.diff
传输文件。棘手的部分是确定该-p
选项要使用的内容(如果补丁中没有说明)。为此,您需要查看补丁文件的开头。例如:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
在这种情况下,comm.c
是将被更改的源文件的名称。但是,请注意有一个目录附加到它。由于这些目录不是相同的目录(“旧”对“新”),因此可以很清楚地知道这部分路径是垃圾(出于我们的目的)。-p
切换的目的(请参阅参考资料man patch
)是为了消除此前缀。它需要一个数字,即/
要消除的斜杠()的数量,并且所有内容都在中间。在这种情况下,我们将使用-p1
简化的路径comm.c
。
该假定comm.c
实际上位于同一目录中,这将是您的解释是否正确的另一条线索。如果这两行都是src/comm.c
,并且comm.c
实际上位于src
构建树的子目录中,那么您需要使用-p0
-请注意,完全不使用-p
将删除所有斜杠。如果路径是绝对路径(即以开头/
),那可能就是您想要的。现在应用补丁:
patch -p1 < patch.diff
源现在已被修改。如果有更多.diff
文件,请以相同方式应用这些文件。
3.构建并安装。
这是正常的过程中,你会从源经过建立的东西-第一./configure
,那么make
,make check
,make install
。在进行最后一个操作之前,如果已经安装了foobar
,则请确定是要删除还是覆盖它,或者要如何处理命名冲突。您可能希望foobar
引用的是新的修补版本,而不是旧版本。