在iOS平台使用libcurl

本文讨论了在iOS环境中解决libcurl库链接错误的步骤。通过在build phase的linkbinarywithlibraries中加入libz.dylib,成功解决了与zlib相关的链接错误。此解决方案适用于在Cocos2d-x项目中使用libcurl时遇到类似问题的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在开发一个独立的公共库,里面要用到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,才跑起来,里面的道道还是没有弄得特别清晰还。

转载于:https://www.cnblogs.com/unionfind/p/3355370.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值