bsdiffのコンパイルとMacの使用



Bsdiff Compile Use Mac



はじめに:この記事はapkインクリメンタルアップデート記事の前の補足の内容であり、Macでbsdiffがコンパイルして使用したものを整理するために単独で実行します。以下に、私が独自のコンピューター実装手順を実行するプロセスについて説明します。

ステップ1:ダウンロード



クリックしてダウンロード: bsdiff / bspatch圧縮

ステップ2:コンパイル



まず、ダウンロードしたbsdiff-4.3.tar.gzアーカイブを解凍します

再入力bsdiff-4.3ディレクトリ、ターミナルでmakeコマンドを使用して構築された実行

この時点で、次のように指定する必要があります。 Makefile:13:***区切り文字がありません。やめる。



これは、makefileの内容の形式ではなく、Makefileファイルを変更し、次のように変更されたファイルの内容を変更します。

CFLAGS += -O3 -lbz2 PREFIX ?= /usr/local INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555 INSTALL_MAN ?= ${INSTALL} -c -m 444 all: bsdiff bspatch bsdiff: bsdiff.c bspatch: bspatch.c install: ${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin .ifndef WITHOUT_MAN ${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1 .endif

これは、TABキーが前に付いた.ifndef WITHOUT_MAN、.endiステートメントでインデントされます。

次に、この時点で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 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/stdio.h:261:6: 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 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/stdio.h:261:6: 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) { ^ bspatch.c:100:13: error: use of undeclared identifier 'header' if (memcmp(header, 'BSDIFF40', 8) != 0) ^ bspatch.c:104:19: error: use of undeclared identifier 'header' bzctrllen=offtin(header+8) ^ bspatch.c:105:19: error: use of undeclared identifier 'header' bzdatalen=offtin(header+16) ^ bspatch.c:106:17: error: use of undeclared identifier 'header' newsize=offtin(header+24) ^ bspatch.c:137:5: error: use of undeclared identifier 'old' ((old=malloc(oldsize+1))==NULL) || ^ bspatch.c:139:12: error: use of undeclared identifier 'old' (read(fd,old,oldsize)!=oldsize) || ^ bspatch.c:141:6: error: use of undeclared identifier 'new' if((new=malloc(newsize+1))==NULL) err(1,NULL) ^ bspatch.c:147:43: error: use of undeclared identifier 'buf' lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8) ^ bspatch.c:151:19: error: use of undeclared identifier 'buf' ctrl[i]=offtin(buf) ^ bspatch.c:159:42: error: use of undeclared identifier 'new' lenread = BZ2_bzRead(&dbz2err, dpfbz2, new + newpos, ctrl[0]) ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] errors generated. make: *** [bspatch] Error 1

このソリューションは、bspatch.cファイルに#includeが追加されています。

次に、makeコマンドを実行すると、コマンドが成功すると、現在のディレクトリにbsdiff、bspatchファイルが生成されます。

次に、bsdiff、bspatchコマンドを簡単に使用します。

bsdiff:差分ファイルの生成。差分パッケージサーバーの生成に使用されます。

コマンド:bsdiff oldfile newfile patchfile

oldfile:古いファイル

newfile:新しいファイル

patchfile:差分ファイルを生成します。

bspatch:ファイルをマージします。違いに応じて新しいクライアントファイル結合パッケージを生成するために使用されます。

コマンド:bspatch oldfile newfile2 patchfile

oldfile:古いファイル

newfile2:生成された新しいファイル

パッチファイル:差分ファイル

最後に、たとえば、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

Md5値new.apkはこの時点で検出され、new2.apkは一貫しています。これは、下請けの生成と統合プロセスの違いが問題ではないことを証明しました。

またね