bsdiff的編譯與使用

2022-03-17 18:03:28 字數 4009 閱讀 3468

bsdiff是乙個差異包比較工具,可以用來實現增量更新.

版本:macos 10.12

tar -zxvf bsdiff-4.3.tar.gz

2.進入bsdiff-4.3目錄,在終端下執行構建

cd bsdiff-4.3

make

此時報錯:makefile:13: *** missing separator.  stop.

這是makefile檔案的內容的格式不對,修改makefile檔案,修改後的檔案內容如下:

cflags        +=    -o3 -lbz2

prefix ?= /usr/local

install_program ?= $ -c -s -m 555

install_man ?= $ -c -m 444

all: bsdiff bspatch

bsdiff: bsdiff.c

bspatch: bspatch.c

install

: $ bsdiff bspatch $/bin

.ifndef without_man

$ bsdiff.

1 bspatch.1 $/man/man1

.endif

即.ifndef without_man,.endi語句f前面加tab鍵進行縮排

然後再執行make,此時又報錯:

bspatch.c:39:21: error: unknown type name '

u_char

'; did you mean '

char

'?static off_t offtin(u_char *buf)

^~~~~~

char

bspatch.c:

65:8: error: expected ';'

after expression

u_char header[

32],buf[8

]; ^;

bspatch.c:

65:2: error: use of undeclared identifier '

u_char

'; did you mean '

putchar

'?u_char header[

32],buf[8

]; ^~~~~~putchar

: note:

'putchar

'declared here

int putchar(int

); ^bspatch.c:

65:9: error: use of undeclared identifier '

header

'u_char header[

32],buf[8

]; ^bspatch.c:

65:20: error: use of undeclared identifier '

buf'

u_char header[

32],buf[8

]; ^bspatch.c:

66:2: error: use of undeclared identifier '

u_char

'; did you mean '

putchar

'?u_char *old, *new;

^~~~~~putchar

: note:

'putchar

'declared here

int putchar(int

); ^bspatch.c:

66:10: error: use of undeclared identifier '

old'

u_char *old, *new;

^bspatch.c:

66:16: error: use of undeclared identifier '

new'

u_char *old, *new;

^bspatch.c:

93:12: error: use of undeclared identifier '

header

'if (fread(header, 1, 32, f) < 32

) -c -s -m 555install_man ?= $ -c -m 444all: bsdiff bspatch

bsdiff: bsdiff.c

bspatch: bspatch.c

install:

$ bsdiff bspatch $/bin

.ifndef without_man

$ bsdiff.1 bspatch.1 $/man/man1

.endif

接著編譯,結果報錯,找不到bzlib.h

tar zxvf bzip2-1.0.6.tar.gz

cd bzip2-1.0.6

make

sudo make install

然後再編譯bsdiff,出現以下資訊:

修改makefile, 修改後如下:

cc=gcc

ldflags=cflags += -o3 -lbz2

prefix ?= /usr/local

install_program ?= cp

install_man ?= cp

all: bsdiff bspatch

bsdiff: bsdiff.c

$(cc) bsdiff.c $(cflags) $(ldflags) -o bsdiff

bspatch: bspatch.c

$(cc) bspatch.c $(cflags) $(ldflags) -o bspatch

install

: $ bsdiff bspatch $/bin

$ bsdiff.

1 bspatch.1 $/man/man1

然後再編譯,安裝就可以了

生成差異檔案,常用於服務端生成差異包

bsdiff oldfile newfile patchfile

oldfile: 舊的檔案

newfile:新的檔案

patchfile:生成的差異檔案

合併檔案,常用於客戶端根據差異包合併生成新的檔案

bspatch oldfile newfile2 patchfile

oldfile:舊的檔案

newfile2:生成的新的檔案

patchfile:差異檔案

舉個例子,測試一下使用bsdiff進行增量更新

./bsdiff old.apk new.apk old-new.patch

./bspatch old.apk new2.apk old-new.patch

md5 new.apk

md5 (new.apk) = fc8bdb15f80abef22eb25f9601063cf0

md5 new2.apk

md5 (new2.apk) = fc8bdb15f80abef22eb25f9601063cf0

此時new.apk和new2.apk的md5值是一致的

增量更新 bsdiff工具的安裝和使用

tmp ccqwbjxf.o 在函式 main 中 bsdiff.c text startup 0x2e4 對 bz2 bzwriteopen 未定義的引用 bsdiff.c text startup 0xb29 對 bz2 bzwrite 未定義的引用 bsdiff.c text startup ...

wxWidgets的編譯與使用

今天開始搞wxwidgets,wxwidgets是乙個跨平台的ui類庫,自帶系統的原生介面。開發的時候與mfc挺像的。在windows環境下,必須先安裝mingw 也許cygwin也可以 才能編譯wxwidgets專案。編譯的時候在命令列下進入.wxwidgets 2.8.0 build msw目錄...

ffmpeg的編譯與使用

ffmpeg的編譯與使用 今天我們介紹如何編譯ffmpeg 2.解壓 tar jxvf ffmpeg 0.10.3.tar.bz2 3.configure make make的時間挺長 sudo make install4.編譯完成後,會在主目錄下生成如下幾個可執行檔案 ffmpeg ffmpeg ...