2

我有一个使用libcurl.all.a的项目。它在 Xcode 4.6.3 上构建、链接和运行完美。但在 Xcode5 中,它会在未定义的符号上引发链接器错误。错误日志如下。

  Undefined symbols for architecture i386:
  "_SSLCopyPeerCertificates", referenced from:
      _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o)
  "_SSLDisposeContext", referenced from:
      _Curl_darwinssl_close in libcurl.all.a(libcurl_la-curl_darwinssl.o)
      _Curl_darwinssl_shutdown in libcurl.all.a(libcurl_la-curl_darwinssl.o)
      _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o)
  "_SSLNewContext", referenced from:
      _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o)
  "_SSLSetEnableCertVerify", referenced from:
      _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o)
  "_SSLSetProtocolVersionEnabled", referenced from:
      _darwinssl_connect_common in libcurl.all.a(libcurl_la-curl_darwinssl.o)
  ld: symbol(s) not found for architecture i386
  clang: error: linker command failed with exit code 1 (use -v to see invocation)

SecurityFramework 已经存在于项目中,并且我已将Build Active Architecture Only设置为 No。由于它在 Xcode 4.6.3 中编译,我认为它与缺少目标成员资格没有任何关系。

有没有办法解决这个问题?或者一个可能的解决方法,让这个库与 Xcode5 一起工作非常重要,因为它需要在 iOS7 应用程序中使用。

4

1 回答 1

0

因此,我发布答案,以便它对可能面临类似情况的任何人有用。我能够从@deltheli 和@sergio 的评论中解决问题,非常感谢他们的帮助。

所以,我不得不运行 lipo -info 来了解支持的架构,发现不支持 armv7s 和 arm64,所以我尝试在 armv7 中编译它,但失败并解释了为什么它在 Xcode 4.6 中而不是在 5 中完美运行的问题. 我的 libcurl 已经过时了!而且我使用的版本不支持某些DarwinSSL符号。使用足够新的版本为我解决了这个问题。

于 2013-12-27T05:18:01.090 回答