Diff
應用差異更新檔
我從未在 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
,但是在嘗試了一些失敗的組合之後。在這種情況下,我應該如何處理上面的程式碼片段?
這實際上是一個非常短的diff 命令。它說要刪除該行
//#define DEBUG
並將其替換為#define DEBUG
.在這種差異格式中,以 single 開頭的行將
-
被刪除,而以 single 開頭的行會+
被添加。其他行用於上下文,並@@
告訴文件中的偏移量和引用的行數。(+++
---
三行告訴你哪個文件被修改了。)更新檔無法應用的兩個常見原因是:
- 實際受影響的行已更改,或
- 這些行周圍的上下文已經改變(可能改變了太多,因為更新檔通常使用“模糊”算法。
在這種情況下,最簡單的方法可能是手動查看程式碼部分(在
linux-user/flatload.c
文件中,正如您從第一行看到的那樣),看看是否有#define DEBUG
任何地方被註釋掉,然後刪除//
註釋字元。親自查看程式碼,我發現問題實際上可能是原因 #3 — 更新檔被破壞了,因為它以不應該的方式呈現。看到剛才說的那一行了
#include
嗎?在原始來源中,它說#include <target_flat.h>
。你發現更新檔的部落格軟體可能認為這<target_flat.h>
是一個可疑的 HTML 標籤,然後默默地刪除了它,而作者沒有註意到。