Android增量升級之bsdiff.c:(.text+0x151b):對‘BZ2_bzWriteOpen’未定義的引用的解決

最近在做Android增量升級,在編譯bsdiff工具時遇到了下面的問題:
bsdiff.c:(.text.startup+0x2e4):對‘BZ2_bzWriteOpen’未定義的引用
bsdiff.c:(.text.startup+0xb29):對‘BZ2_bzWrite’未定義的引用
bsdiff.c:(.text.startup+0xcbb):對‘BZ2_bzWrite’未定義的引用
bsdiff.c:(.text.startup+0xe67):對‘BZ2_bzWrite’未定義的引用
bsdiff.c:(.text.startup+0xece):對‘BZ2_bzWriteClose’未定義的引用
bsdiff.c:(.text.startup+0xf32):對‘BZ2_bzWriteOpen’未定義的引用
bsdiff.c:(.text.startup+0xf5f):對‘BZ2_bzWrite’未定義的引用
bsdiff.c:(.text.startup+0xf99):對‘BZ2_bzWriteClose’未定義的引用
bsdiff.c:(.text.startup+0xffa):對‘BZ2_bzWriteOpen’未定義的引用
bsdiff.c:(.text.startup+0x1027):對‘BZ2_bzWrite’未定義的引用
bsdiff.c:(.text.startup+0x1061):對‘BZ2_bzWriteClose’未定義的引用
百度好久所有的文章結尾都是:

這裏寫圖片描述
真TM扯淡,天下文章一大抄,沒解決的問題也要抄一遍。。。我如果也停在這裏會不會把讀者氣瘋(手動滑稽)


從上面的錯誤可以看出是由於找不到BZ2_bzWriteOpen引起的和java中“cann't find object。。。”差不多;由此可以推測編譯不通過,
是由於Makefile的問題造成的,說明其沒有關聯到bzip2的庫文件(作爲Linux菜鳥,關於Makefile文件的問題就先不研究了);所以,關鍵是關聯bzip2。
從bzip2的Makefile文件中我們可以看出bzip2將庫文件放在了/usr/local/lib目錄下,執行文件在/usr/local/bin目錄下,這樣就簡單了,
我們也仿照bzip將編譯的bsdiff和bspatch放在/usr/local/bin目錄下;這個路徑需要root權限,這裏先切換到root用戶,然後分別執行下面兩條命令即可:
gcc bsdiff.c -lbz2 -o /usr/local/bin/bsdiff
gcc bspatch.c -lbz2 -o /usr/local/bin/bspatch
到這裏問題完美解決。當然還有更簡單的辦法,這裏自己編譯可以解決源和網絡的問題(公司網絡管理的比較嚴)。

更簡單的使用bsdiff的辦法:

http://blog.csdn.net/zouchengxufei/article/details/51700590

關於增量升級見鴻洋大神的blog:

http://blog.csdn.net/lmj623565791/article/details/52761658

關於拆分合並後的md5驗證,鴻洋大神用的是mac自帶的MD5工具,這裏安利一個Windows下的MD5命令行查看工具,使用方法如下:
certutil -hashfile XXXX MD5
效果圖:

這裏寫圖片描述

發佈了89 篇原創文章 · 獲贊 67 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章