天天看點

IPHONE,zlib庫編譯iphone版本

連續寫了幾篇部落格,說的都是痛一個問題,其實也沒什麼深奧的,就是編譯器和連接配接器原理

道理我都懂,可真正做起來也不容易,就好像iphone的這些庫編譯,這2年來我真不懂,2年來一點也沒學過

但隻要能堅持下來,第731天,一切都會闊然開朗

部落格的最後有下載下傳連結,但能不直接下載下傳就不直接下載下傳,自己編譯一下,收獲大很多

(xxx要成大業,必先苦其心志,程式猿共勉之。。。。。)

雖然蘋果10.8中的zlib版本為1.2.5,目前最新的zlib版本為1.2.7,另外一個就是蘋果中的zlib不帶minizip,而WINDOWS版本的zlb的庫中帶這個功能。如何編譯一個最新的zlib版本同時加入需要的其它子產品,這是本文研究的目的。

直接将zlib下載下傳解壓到蘋果的一個目錄下,在終端中執行./configure,是肯定不會成功的。

在網上找了一個編譯庫的腳本:http://code.google.com/p/ios-static-libraries/

經過檢視,在build-all.sh中已經加入了對于IOS7和IOS7S的支援,而且這個工程最近還更新過,是以是值得使用的。并且可以看出,在模拟器上編譯,生成的就是i386的代碼,而在實體機上編譯生成的應該是arm代碼

需要的腳本就是build-all.sh和build-zlib.sh,當然使用時還需要修改一下。

1、注釋掉build-all.sh中調用build-zlib.sh之前的調用其它腳本

2、注釋掉build-zlib.sh解壓和下載下傳的語句,以及pushd和popd語句

3、在build-all.sh腳本中增加

export PATH="${PATH}:${DEVROOT}/usr/bin/"

這樣make就可以用了

4、修改configure檔案

原來在configure檔案中

             AR="/usr/bin/libtool"

             ARFLAGS="-o" ;;

修改為

#             AR="/usr/bin/libtool"

#             ARFLAGS="-o" ;;

;;

解決libtool無法找到的問題,直接用ar

這樣就可以了,在終端的zlib目錄下執行./build-all.sh即可

最後生成的檔案在iPhoneSimulator-6.0目錄下

如果要加入minizip到庫中,需要修改makefile.in檔案,加入需要的obj子產品

OBJMZ = contrib/minizip/zip.o contrib/minizip/unzip.o contrib/minizip/ioapi.o

OBJC = $(OBJZ) $(OBJG) $(OBJMZ)

但configure在生成makefile時會替換OBJC變量,是以還需要修改configure檔案中OBJC變量預設值

OBJC='$(OBJZ) $(OBJG) $(OBJMZ)'

在測試工程中,删除對蘋果zlib1.1.5.dylib的應用,加入編譯後的zlib,然後删除工程中的minizip的相關檔案,成功

這裡提供測試工程:

下載下傳: testzipframework_zlib1.2.7.rar

可參考本人博文:

在IOS上程式設計壓縮解壓縮zip格式的檔案

http://xzhoumin.blog.163.com/blog/static/408811362013115529297/

并且提供修改後的檔案:

下載下傳: zlib修改檔案及腳本.rar

供參考