我从来没有在 Linux 中打过任何补丁,而且我无法确切地弄清楚那个人写了什么这个帖子(第二段)的意思是。该目标源qemu
来自 github,要应用的更改是:
diff --git a/linux-user/flatload.c b/linux-user/flatload.c
index 58f679e..c13a201 100644
--- a/linux-user/flatload.c
+++ b/linux-user/flatload.c
@@ -44,7 +44,7 @@
#define ntohl(x) be32_to_cpu(x)
#include
-//#define DEBUG
+#define DEBUG
#ifdef DEBUG
#define DBG_FLT(...) printf(__VA_ARGS__)
对我来说这看起来像是一个很长的diff
命令,但尝试执行它失败了。经过一番搜索后,我虽然必须将其保存为 ieqemu.patch
并使用 运行它patch
,但在尝试了一些组合后也失败了。
在这种情况下,我应该如何处理上面的代码片段?
答案1
这实际上是一个很短差异命令。它说删除该行//#define DEBUG
并将其替换为#define DEBUG
.
在此 diff 格式中,以 single 开头的行将-
被删除,并+
添加以 single 开头的行。其他行用于上下文,并@@
告诉文件的偏移量和引用的行数。 (三行+++
---
告诉你哪个文件被修改了。)
补丁无法应用的两个常见原因是:
- 实际受影响的线路已更改,或
- 这些行周围的上下文已经改变(可能,改变太多,因为补丁通常使用“模糊”算法。
在这种情况下,最简单的方法可能是手动查看代码部分(在文件中linux-user/flatload.c
,正如您从第一行看到的那样),看看是否有任何地方被注释掉#define DEBUG
,然后删除//
注释字符。
我自己查看代码,发现问题实际上可能是原因#3——补丁被破坏了,因为它以不应该的方式呈现。看到刚才说的那句话了#include
吗?在里面原始来源, 它说#include <target_flat.h>
。您发现该补丁的博客软件可能认为这<target_flat.h>
是一个可疑的 HTML 标记,并默默地将其删除,而作者没有注意到。
答案2
该补丁看起来像是使用创建的git
,特别是命令git diff
。所以你可能最好使用 git 工具(具体来说git apply
)将其修补到目标文件上:
git apply qemu.patch