Estoy finalizando una biblioteca CometD codificada en C de código abierto, pensé que sería una buena idea abrirla a usuarios de OSX/iOS, como yo.
Para facilitar el trabajo de los desarrolladores de OSX/iOS, quería cambiar de una biblioteca C estática a una biblioteca estática Xcode iOS. Así que seguí los consejos que encontré en la red y generé una biblioteca estática compatible con iOS.
El problema es que, cada vez que intento usarlo, aparece un error de tipo:
Símbolos indefinidos para la arquitectura x86_64: ******, referenciados desde: -*********** en *******.a(*******.o)
Este error se repite para casi todas las funciones de C que tengo en mi biblioteca.
Primero pensé que tal vez la biblioteca no es x86_64 compatible , está vacía o realmente no tiene ningún símbolo x86_64.
Así que verifiqué con un "lipo-info" en la biblioteca y aquí está la respuesta:
Para estar realmente seguro, también usé "nm -arch x86_64" en la biblioteca y busqué varias funciones indefinidas informadas por Xcode como errores. Pensé que me equivocaría y no encontraría nada, pero ¿adivina qué?
Entonces mi pregunta es:
Si los símbolos están presentes en una biblioteca compatible con x86_64, ¿por qué Xcode genera este error? Incluso si compilo la biblioteca para todos los tipos de arm*/s, sigo recibiendo este error x86_64.
¿No me doy cuenta de algo o simplemente lo estoy haciendo mal?
Sus respuestas siempre son apreciadas.
Actualización (Este es el enlace al Proyecto Xcode): https://github.com/GhostGumm/CometD-x86_64-issue
Actualización 2 : El Sr. Trojanfoe atrajo mi atención sobre una advertencia de enlace que tuve al compilar. De hecho, el enlazador parecía perder la carga de la biblioteca en busca de un directorio que no existía. Después de mover la biblioteca al directorio correcto, vinculándola manualmente, el error x86_64 desapareció.
Lamentablemente, el problema sigue presente. Justo después de una compilación exitosa, traté de usar lib , pero cuando "asigné" e "inicié" mi clase principal así:
ZetaFactory *Client = [[ZetaFactory alloc] init];El error x86_64 vuelve rugiendo con la auténtica ferocidad de mil millones de soles. Publiqué el enlace al proyecto Xcode, siéntase libre de probarlo ya que no tengo más ideas sobre cómo solucionarlo, pero lo más importante es por qué y dónde esto tiene errores.
No obstante seguiré investigando.
Descargué e intenté construir tu proyecto. Mirando los errores de enlace, por ejemplo, init_stack_remove_data no encontrado, son correctos. No hay una definición de init_stack_remove_data en ninguna parte de la fuente de su proyecto.
En el resultado "nm -arch x86_64" que cita arriba, tenga en cuenta que la "U" antes de una definición de función indica un uso de esa función, no una definición de la misma. La salida nm muestra que el enlazador es correcto: el código llama a esas funciones, pero nunca se definen. Cuando estén definidos, verá una "T" antes de la función en la salida nm.
Debe actualizar su proyecto con el resto de la fuente necesaria antes de que se vincule sin errores.