gol*_*cks 15 compiling patch software-installation
我有一个应用程序foobar,有人为其编写了补丁来添加我喜欢的功能。如何使用补丁?
gol*_*cks 21
补丁通常包含在.diff文件中,因为补丁是使用diff命令创建的。
补丁是对源代码的一系列插入和删除。因此,为了使用补丁,您必须在应用补丁后从源代码构建应用程序(例如,“foobar”)。所以,分步骤:
1. 获取foobar的源码包。
大多数 linux 发行版(nb 补丁不是 linux 独有的)都有可用于此目的的“源包”,但由于它们是异构的,我将在这里只参考原始源的格式。原始来源不是发行版的一部分,可能很难找到。一个很好的起点是维基百科,它有许多流行应用程序的文章,并且文章应该包含指向带有源下载的主页的链接。显然,您也可以自己谷歌搜索。源包将被称为类似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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,comm.c是将被更改的源文件的名称。但是,请注意附加了一个目录。由于这些不是同一个目录(“旧”与“新”),这是路径的这一部分是垃圾(出于我们的目的)的一个重要线索。-p开关(参见man patch)的目的是消除这个前缀。它需要一个数字,即/要消除的斜线 ( )的数量,介于两者之间;在这种情况下,我们将使用-p1将路径减少到简单的comm.c.
这假定comm.c实际上在同一目录中,这将是关于您的解释是否正确的另一个线索。如果这两行都是src/comm.c, 并且comm.c实际上位于src构建树的子目录中,那么您需要使用-p0-- 请注意,根本不使用-p将删除所有斜杠。如果路径是绝对路径(即以 开头/),那可能就是您想要的。现在应用补丁:
patch -p1 < patch.diff
Run Code Online (Sandbox Code Playgroud)
现在已经修改了源。如果有更多.diff文件,请以相同的方式应用它们。
3. 构建和安装。
这是正常的过程中,你会从源经过建立的东西-第一./configure,那么make,make check,make install。在执行最后一个之前,如果您已经安装了foobar,请决定是否要删除或覆盖它,或者您将如何处理命名冲突。您可能想foobar参考您的新的、打过补丁的版本,而不是旧版本。