25

添加“libPusher-combined.a”及其头文件后,在“其他链接器标志”构建设置中添加“-all_load”后,我收到了这些错误。我完全按照说明输入“-all_load”(在“添加到您的 iOS 项目”中的“使用预编译的静态库”下,但我最终得到 20 个 Mach-O 链接器错误。: / 谁能帮我解决这个问题?

以下是错误:

Undefined symbols for architecture armv7:
 "_utf8_nextCharSafeBody", referenced from:
  -[SRWebSocket _pumpScanner] in libPusher-combined.a(SRWebSocket.o)
 "_SCError", referenced from:
  -[Reachability startNotifier] in libPusher-combined.a(Reachability.o)
 "_utf8_countTrailBytes", referenced from:
  -[SRWebSocket _pumpScanner] in libPusher-combined.a(SRWebSocket.o)
 "_SCNetworkReachabilitySetDispatchQueue", referenced from:
  -[Reachability startNotifier] in libPusher-combined.a(Reachability.o)
  -[Reachability stopNotifier] in libPusher-combined.a(Reachability.o)
 "_kCFHTTPVersion1_1", referenced from:
  -[SRWebSocket didConnect] in libPusher-combined.a(SRWebSocket.o)
"_CFHTTPMessageIsHeaderComplete", referenced from:
  ___30-[SRWebSocket _readHTTPHeader]_block_invoke_0 in libPusher-combined.a(SRWebSocket.o)
 "_CFHTTPMessageCreateRequest", referenced from:
  -[SRWebSocket didConnect] in libPusher-combined.a(SRWebSocket.o)
 "_SCNetworkReachabilityCreateWithAddress", referenced from:
  +[Reachability reachabilityWithAddress:] in libPusher-combined.a(Reachability.o)
 "_SCErrorString", referenced from:
  -[Reachability startNotifier] in libPusher-combined.a(Reachability.o)
 "_SCNetworkReachabilityCreateWithName", referenced from:
  +[Reachability reachabilityWithHostname:] in libPusher-combined.a(Reachability.o)
 "_CFHTTPMessageCopyAllHeaderFields", referenced from:
  ___30-[SRWebSocket _readHTTPHeader]_block_invoke_0 in libPusher-combined.a(SRWebSocket.o)
 "_CFHTTPMessageGetResponseStatusCode", referenced from:
  -[SRWebSocket _HTTPHeadersDidFinish] in libPusher-combined.a(SRWebSocket.o)
 "_CFHTTPMessageSetHeaderFieldValue", referenced from:
  -[SRWebSocket didConnect] in libPusher-combined.a(SRWebSocket.o)
  ___25-[SRWebSocket didConnect]_block_invoke_0 in libPusher-combined.a(SRWebSocket.o)
 "_CFHTTPMessageCreateEmpty", referenced from:
  -[SRWebSocket _readHTTPHeader] in libPusher-combined.a(SRWebSocket.o)
 "_CFHTTPMessageCopySerializedMessage", referenced from:
  -[SRWebSocket didConnect] in libPusher-combined.a(SRWebSocket.o)
 "_SCNetworkReachabilitySetCallback", referenced from:
  -[Reachability startNotifier] in libPusher-combined.a(Reachability.o)
  -[Reachability stopNotifier] in libPusher-combined.a(Reachability.o)
 "_SCNetworkReachabilityGetFlags", referenced from:
  -[Reachability isReachable] in libPusher-combined.a(Reachability.o)
  -[Reachability isReachableViaWWAN] in libPusher-combined.a(Reachability.o)
  -[Reachability isReachableViaWiFi] in libPusher-combined.a(Reachability.o)
  -[Reachability connectionRequired] in libPusher-combined.a(Reachability.o)
  -[Reachability isConnectionOnDemand] in libPusher-combined.a(Reachability.o)
  -[Reachability isInterventionRequired] in libPusher-combined.a(Reachability.o)
  -[Reachability reachabilityFlags] in libPusher-combined.a(Reachability.o)
  ...
 "_CFHTTPMessageCopyHeaderFieldValue", referenced from:
  -[SRWebSocket _checkHandshake:] in libPusher-combined.a(SRWebSocket.o)
 "_CFHTTPMessageAppendBytes", referenced from:
  ___30-[SRWebSocket _readHTTPHeader]_block_invoke_0 in libPusher-combined.a(SRWebSocket.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果您需要更多信息,请询问。我希望我没有给太多麻烦。提前致谢。

4

6 回答 6

74

检查以确保您包含以下框架(通过https://github.com/square/SocketRocket):

框架依赖

您的 .app 必须与以下框架/dylib 链接

libicucore.dylib CFNetwork.framework Security.framework Foundation.framework

于 2012-12-03T21:32:25.827 回答
27

确保在构建设置选项卡的“其他链接器标志”中也有 -licucore,如随附的屏幕截图所示:

其他链接器标志

于 2013-10-24T05:34:30.257 回答
5

我将完整的 SocketRocket 文件夹复制到我的应用程序中,以便在我的应用程序中使用 Web 套接字,并将 libicucore.dylib、CFNetwork.framework、Security.framework、Foundation.framework 二进制文件与我的项目相关联。这消除了我所有的错误和警告。

于 2013-04-01T16:14:09.683 回答
5

对于最新的 sdk,您应该添加:

libicucore.tbd 

因为 libicucore.dylib 不再存在。

希望 .tbd 扩展名不是为了“被删除”?

于 2015-12-11T15:03:09.000 回答
4

你能在你的目标->构建阶段签出吗?这些文件是否存在?如果你正在为模拟器运行,那么首先你需要为该库的模拟器构建一个我猜你正在使用 SRWebSocket 库的库。只需打开该项目并为模拟器进行构建并从构建文件夹复制文件,然后添加到您的项目中,如果您在设备上运行应用程序,则对设备执行相同操作。

于 2012-03-29T18:50:00.057 回答
2

在我的情况下,当我将 SystemConfiguration.framework 添加到项目中并且问题出现时...... :-)

于 2013-01-23T19:18:31.447 回答