libcurl使用起來不難亩钟,但編譯對應的iOS庫文件卻是個大問題扶镀,編譯過程中可能各種報錯,網上找的庫可能libcurl版本或者OpenSSL版本不符合要求忆肾,這時候就得自己找對應的OpenSSL和libcurl源碼自己編譯了。本文介紹的方案支持IPv6菱肖,混編openssl后可以支持https請求。
1.編譯準備
我是從網絡上找的腳本進行編譯的旭从,但是很多腳本都是不能用的稳强,這個過程中浪費了很多時間,最后終于找到了可用的和悦,GitHub鏈接如下:
https://github.com/sinofool/build-libcurl-ios
https://github.com/sinofool/build-openssl-ios
這兩個鏈接里的腳本都下載下來退疫,單獨放到一個文件夾里面。
然后去openssl的官網https://www.openssl.org/source/和curl的官網https://curl.haxx.se/download.html
下載最新的源碼鸽素,如下圖
下載好了源碼后也一起放入剛剛腳本所在的文件夾褒繁,并且把源碼解壓出來得到兩個源碼文件夾,最后該文件夾內容應該是如下圖所示:
然后為了防止因為腳本沒有權限而無法執(zhí)行馍忽,我們需要賦予腳本可執(zhí)行權限棒坏。也很簡單,比如要賦予build_libcurl_dist.sh執(zhí)行權限遭笋,我們打開終端坝冕,cd進入build_libcurl_dist.sh所在的文件夾,然后執(zhí)行chmod 777 build_libcurl_dist.sh
就OK了瓦呼。順帶也對build_openssl_dist.sh同樣操作喂窟。
到這我們的準備工作就完成了。
2.開始編譯
編譯openssl
要支持https所以我們先得編譯openssl央串,然后再把openssl庫混編進libcurl中磨澡。
cd 進入我們上圖中的openssl-1.1.0g源碼文件夾,然后把build_openssl_dist.sh拖進終端质和,回車稳摄,就開始編譯openssl了,編譯完侦另,你會發(fā)現(xiàn)桌面多了一個文件夾秩命,里面放著openssl的庫和.h文件,如下圖:
編譯libcurl
這時候褒傅,就該編譯libcurl了弃锐,先cd進入curl-7.56.1源碼文件夾,接著把build_libcurl_dist.sh腳本拖進終端殿托,回車霹菊,等待編譯完成,你會看到桌面上多了一個libcurl-ios-dist文件夾,里面就是我們最終得到的支持https旋廷、IPv6的庫和.h文件了鸠按。注意下,剛剛那些openssl的.h也已經被混編入libcurl.a了饶碘,所以我們引用的時候不需要把openssl的那些文件拖進工程目尖。
3.如何使用libcurl
使用說明就不多說了,很簡單的扎运,把編譯得到的libcurl-ios-dist文件夾直接拖進工程瑟曲,然后在工程里Targets的General 中,引用下libz.tbd這個系統(tǒng)庫豪治,使用curl的時候洞拨, #include "curl.h"就OK了。
如果想查看libcurl的版本號负拟,printf("\nlibcurl verrsion %s\n",curl_version());
烦衣。打印結果是libcurl/7.56.1 SecureTransport
后面的 SecureTransport表示支持ssl,但是openssl的具體版本號目前我沒找到對應的方法可以打印掩浙,下面這種方式打印出來的結果是openssl version SecureTransport
和上面一致花吟,就是告訴你支持ssl但不告訴你版本號。
curl_version_info_data *data= curl_version_info(CURLVERSION_NOW);
printf("\nopenssl version %s\n",data->ssl_version);
這個data結構體有一個long ssl_version_num; /* not used, always zero */
這個屬性涣脚,但官方文檔告訴你示辈,這屬性用不了,只會返回0遣蚀,我試過確實是只能返回0...不知道官方怎么想的矾麻。
具體如何用libcurl發(fā)起請求,請看我的另外一篇文章iOS用libcurl發(fā)起一個get請求芭梯,并保存返回數(shù)據(jù)到沙盒
4.尾聲
簡單概括就是险耀,工欲善其事必先利其器,編譯本身很簡單玖喘,不過這個找對腳本就很折磨人了甩牺,網絡上的其余腳本基本上都是不能編譯最新的庫的。希望給被困在這個問題上的同學們一點幫助累奈。