Неопределенные символы для архитектуры armv7? Что означает эта ошибка?

Я только что пометил весь свой код CocoaAsyncSocket как код без ARC, и он дал мне эти 3 ошибки:

Undefined symbols for architecture armv7:
  "_kCFStreamNetworkServiceTypeVoIP", referenced from:
      -[GCDAsyncSocket enableBackgroundingOnSocketWithCaveat:] in GCDAsyncSocket.o
  "_kCFStreamNetworkServiceType", referenced from:
      -[GCDAsyncSocket enableBackgroundingOnSocketWithCaveat:] in GCDAsyncSocket.o
  "_kCFStreamPropertySSLSettings", referenced from:
      -[GCDAsyncSocket maybeStartTLS] in GCDAsyncSocket.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Кто-нибудь знает, что это значит и как это исправить?


person Andrew    schedule 27.12.2011    source источник
comment
Вы связываетесь с CFNetwork?   -  person Mark Adams    schedule 28.12.2011


Ответы (3)


Это означает, что некоторый код, который вы компилируете, ссылается на константы «kCFStreamNetworkServiceTypeVoIP», «kCFStreamNetworkServiceType» и «kCFStreamPropertySSLSettings», но эти константы не были найдены при попытке связать ваш код с используемыми библиотеками.

К сожалению, причин может быть несколько:

  • Вы могли ошибиться в их написании
  • Они могут быть #ifdef'd для этой архитектуры
  • Возможно, вы не связываете правильную библиотеку (y, ies)
  • Они могут быть помечены как имеющие «скрытую» видимость, чтобы их можно было использовать только в объявляющей библиотеке.
  • Вероятно, другие причины

Вы можете использовать «nm», чтобы просмотреть экспортированные символы из двоичного файла библиотеки, и «otool -L», чтобы проверить, какие библиотеки связаны с вашим двоичным файлом.

person Catfish_Man    schedule 27.12.2011

Я думаю, что нашел решение этой проблемы, просмотрев комментарии к коду, но теперь я вижу, что это также то, что предложил Марк Адамс выше. У меня были ошибки, пока я не добавил CFNetwork.framework в Targets->Build Phases->Link Binary With Libraries->Select CFNetwork.framework

person DuneCat    schedule 24.01.2012
comment
@DuneCat Это помогает. Я не знал, будучи новичком в iOS, что вам нужно добавлять фреймворки вручную. Я как-то догадался, что уже все включено. Связанные фреймворки и библиотека -> щелкните значок плюса - у меня работает добавление фреймворка. У меня была такая же ошибка в С#, но Visual Studio уведомляет вас. Я думаю... В любом случае спасибо. - person Martin Berger; 21.09.2012
comment
Я получил ошибку в OS X 10.9, и она была устранена путем включения файла CFNetwork.Framework. - person Joe M; 27.02.2014

У меня была такая же ошибка при интеграции LineaPro API в приложение.

Исправление, которое я реализовал, заключалось в добавлении ExternalAccessory.framework в General -> Linked Framework and Libraries.

У меня уже был включен CFNetwork.framework.

person Nick N    schedule 07.09.2014