在iOS平台使用libcurl


我們在開發一個獨立的公共庫,里面要用到libcurl,老大做好了windows版本,我來維護iOS版,於是去cocos2dx下面扒拉來了對應的include文件以及libcurl.a(windows版也是從這里扒拉過來的),跑之編不過,報這樣的錯誤:

Undefined symbols for architecture i386:

  "_inflate", referenced from:

      _inflate_stream in libCTLib.a(libcurl_la-content_encoding.o)

  "_inflateEnd", referenced from:

      _inflate_stream in libCTLib.a(libcurl_la-content_encoding.o)

      _Curl_unencode_gzip_write in libCTLib.a(libcurl_la-content_encoding.o)

      _Curl_unencode_cleanup in libCTLib.a(libcurl_la-content_encoding.o)

  "_inflateInit2_", referenced from:

      _inflate_stream in libCTLib.a(libcurl_la-content_encoding.o)

      _Curl_unencode_gzip_write in libCTLib.a(libcurl_la-content_encoding.o)

  "_inflateInit_", referenced from:

      _Curl_unencode_deflate_write in libCTLib.a(libcurl_la-content_encoding.o)

  "_zlibVersion", referenced from:

      _Curl_unencode_gzip_write in libCTLib.a(libcurl_la-content_encoding.o)

ld: symbol(s) not found for architecture i386

clang: error: linker command failed with exit code 1 (use -v to see invocation)

 
各種設置不果。另一個項目用的是自己從源碼編出來的庫,可以跑,但是需要帶上其他的一堆.a,而且這樣各個平台的版本也不統一。遂琢磨了半天,看編源碼的腳本里有一句--with-zlib,然后看那幾個錯也都跟zlib有關,就考慮是不是這個地方是關鍵。研究了一下,發現cocos2dx里面,win下面有zlib這個庫,ios下面反而沒有,再從源碼用到zlib的地方回溯回去,發現zlib和pthread一樣,都是xcode里面就自帶啦。
 
然后在build phase的link binary with libraries里面把libz.dylib給加進去就ok了。之前的libcurl.a也是在這里加,這種第三方庫是通過add other加進去,自帶的庫直接就能找到。
 
我們是有個公用庫項目,然后可執行的是另一個項目引用這個項目,最后需要在公用庫里面加libcurl,可執行項目里面加libz,才跑起來,里面的道道還是沒有弄得特別清晰還。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM