2011-12-27 10 views
5

que se acaban de marcar todos los de mi código CocoaAsyncSocket como código no ARC, y me ha dado estos 3 errores:Símbolos indefinidos para architecture armv7? ¿Qué significa este error?

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) 

¿Alguien sabe lo que esto significa y cómo solucionarlo?

+7

¿Estás vinculado con 'CFNetwork'? –

Respuesta

4

significa que algún código se compila es hacer referencia a las constantes "kCFStreamNetworkServiceTypeVoIP", "kCFStreamNetworkServiceType", y "kCFStreamPropertySSLSettings", pero que no se encontraron esas constantes cuando se trató de enlazar el código con las bibliotecas que utiliza.

Por desgracia hay un montón de razones que esto podría ser:

  • Se podía ellas no haya escrito correctamente
  • podrían ser # ifdef'd hacia fuera para que la arquitectura
  • posible que no se vincula el del librar correcta (Y, IES)
  • podrían ser marcados como tener visibilidad 'oculta' de forma que sólo se pueden utilizar en la biblioteca declarar
  • Probablemente otras razones

Puede usar 'nm' para examinar los símbolos exportados desde el binario de una biblioteca, y 'otool -L' para verificar a qué bibliotecas está vinculando el binario.

16

Creo que encontré la solución a esto, mirando los comentarios del código, pero ahora veo que también es lo que Mark Adams sugirió anteriormente. Tuve los errores hasta que agregué el CFNetwork.framework en Objetivos-> Fases de compilación-> Enlace binario con bibliotecas-> Seleccionar CFNetwork.framework

+2

Esta es la respuesta correcta, CFNetwork.framework falta –

+0

Gracias, DuneCat! :-) –

+0

@DuneCat Esto ayuda. No sabía, siendo ios noob, que necesita agregar marcos manualmente. De alguna manera supuse que ya todo estaba incluido. Linked Frameworks y la biblioteca -> haga clic en el signo más -> agregar el marco funciona para mí. Tuve este mismo tipo de error en C#, pero allí Visual Studio te avisa. Creo ... De todos modos, gracias. –

0

Tuve el mismo error al integrar la API de LineaPro en una aplicación.

La solución que implementé fue agregar ExternalAccessory.framework a General -> Linked Framework and Libraries.

Ya tenía CFNetwork.framework incluido.

Cuestiones relacionadas