2010-06-29 14 views
6

Recientemente me actualicé a iPhone SDK 4.0 y ya no puedo compilar mi proyecto para el simulador de iPhone. El problema es que las clases de una de mis propias bibliotecas ya no se pueden encontrar por LD:Error de vinculador (solo simulador) con biblioteca propia después de la actualización a iPhone SDK 4.0

"_OBJC_CLASS_$_Book", referenced from: 
    objc-class-ref-to-Book in Category.o 
    (maybe you meant: ...) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

yo ya había leído algunas otras críticas sobre problemas similares, como por ejemplo, here. "Desafortunadamente", mi problema no tiene nada que ver con un marco de SDK, sino con mi propia lib, por lo que las soluciones mencionadas aquí no son aplicables aquí.

La biblioteca está incluida en "Enlace binario con bibliotecas" de mi destino, las rutas de búsqueda de biblioteca son correctas (comprobó esto con XCode y con un editor de texto sin formato directamente en el archivo de proyecto) y se agregaron correctamente al comando gcc.

Estoy usando iPhone Simulator 3.2 como Base SDK, pero el mismo problema ocurre con SDK 4.0. Nuevamente, esto funciona con el objetivo de mi dispositivo pero no con el objetivo de mi simulador. Sin embargo, funcionó con ambos antes de que actualizara desde el iPhone SDK 3.2 a 4.0. También pude reproducir este error creando un nuevo proyecto con solo un archivo y la lib enlazada. Sin embargo, la lib debería estar bien ya que funcionó con el simulador 3.2 antes de actualizar XCode y mi SDK.

Más Datos: Mac OS X 10.6.3, XCode 3.2.3 de 64 bits, el iPhone OS 3.2, GCC 4.2

Cualquier ayuda sería muy apreciada.


EDIT:

Después de volver a instalar el SDK 3.2, todo funcionó como se esperaba de nuevo. Debe tenerse en cuenta que los SDK en la carpeta /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs se sobrescriben con cada instalación. Luego intenté volver a instalar SDK 4.0 y se produjo el mismo error que el anterior. No cambié nada en mi proyecto y siempre utilicé 3.2 como Base SDK.

El problema, por tanto, posiblemente se pueden reducir a las siguientes opciones:

  • Apple cambió algo. en el Simulator SDK 3.2 que causa el problema
  • un cambio en XCode 3.2.3 causa el problema
  • banderas del compilador erróneas/faltantes al compilar mi propia biblioteca (esas banderas, sin embargo, solo causarían problemas con un SDK modificado o el IDE cambiada)

también hizo un diff carpeta en /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk de la antigua y de la nueva versión de esta carpeta. Resultó que en realidad hay cambios menores dentro del "mismo" SDK. Aún así creo que es un problema de indicador IDE/compilador.

¿Alguien alguna idea? No me quiero quedar con 3.2 para siempre ...

+0

Tuve el mismo problema. Misteriosamente solo ocurrió para el "Release" pero no para la compilación "Debug", aunque no cambié nada después de actualizar al SDK 4.0. Sin embargo, no he examinado esto aún más. – Stiefel

Respuesta

1

Finalmente pude averiguar qué banderas faltaban en mi compilación para construir mi lib. Entonces, para responder a mi pregunta: si alguien tiene problemas para vincular su propia biblioteca estática a un objetivo en XCode 3.2.3 (usando iPhoneSimulator3.2.sdk o iPhoneSimulator4.0.SDK), que necesita para construir su lib con las dos banderas siguientes:

-fobjc-abi-version = 2

-fobjc-legacy-despacho

Gracias de nuevo a PhoneyDeveloper para his hints.

1

Asegúrese de que recompila sus bibliotecas con el mismo SDK base que está utilizando para su aplicación.

+0

Gracias por su respuesta. Uso el mismo SDK básico, así que ese no parece ser el problema. Como se sugirió en otro foro (http://forums.macrumors.com/showthread.php?t=956090), construí mi lib con XCode en lugar de la línea de comando y funcionó. Aunque luego utilicé las mismas banderas gcc con línea de comando y XCode, la lib creada manualmente aún no funcionará con mi aplicación ... – Flo

0

Otra idea: esto me ha pasado en el pasado incluso cuando las bibliotecas no estaban involucradas en.

Comprueba que no has importado archivos usando la opción 'referencias de carpeta de grupo'. Parece que esto le da a Xcode un dolor de cabeza. (Al menos lo hizo en mi caso.)

0

me solucionó esto cuando eliminé indicadores como (-ObjC, -all_load) en 'Otros indicadores del enlazador' que estaba usando en el proyecto. Hubo -toda la carga de conflicto en realidad .

Cuestiones relacionadas