2011-02-04 5 views
5

Actualmente estoy teniendo algunos problemas de enlazador al intentar compilar un programa de Objective-C y creo que la razón por la que no puedo resolver el problema puede deberse a la ignorancia en cuanto al proceso de compilación.¿Cuál es el proceso pasado durante la compilación de Objective-C

¿Sería posible para alguien darme una visión general de los pasos tomados durante la compilación?

Esto es en la actualidad entiendo el proceso:.

  1. las copias del compilador el contenido de los archivos incluidos en el archivo .h que se definió en el compilador no hace un seguimiento de si una. h archivo ya se ha incluido, por lo que puede incluirse en un proyecto varias veces.

  2. Todos los archivos .m se compilan en código equivalente a C (que a su vez se compilan para codificar el objeto).

  3. El vinculador produce enlaces entre las declaraciones hechas en los archivos .h y las funciones apropiadas dentro del código del objeto. Las funciones apropiadas se determinan buscándolas en un archivo .m del mismo nombre.

  4. Los archivos objeto se conectan entre sí para formar el ejecutable, asegurándose de que la función principal se encuentra en el punto de entrada del ejecutable. ¿Alguna declaración presuntamente se borra para ahorrar espacio?

Suponiendo que esto es correcto (que no lo sea), esto sería presumiblemente significa que nunca se debe # include .m archivos porque es probable que terminar con múltiples definiciones de métodos que hará que los problemas de engarce.

Gracias por cualquier iluminación que alguien pueda aportar :).

Saludos,

Danny

Respuesta

3

se entiende la idea más o menos correctamente. Un par de correcciones:

  1. #include no comprueba si ya está incluido o no, pero qué #import cheque.

  2. .m no se convierte primero a C y luego al código de objeto. Fue hecho de esa manera hace 20 años, pero ya no es el caso. Simplemente se compila directamente en el código objeto.

  3. Al vinculador no le importa cómo se llamó el archivo. Puede usar diferentes nombres de archivo para .h y .m. Puede dividir implementaciones de funciones declaradas en un archivo .h en múltiples archivos .m, por ejemplo.

  4. Si las implementaciones no utilizadas se eliminan o no depende del compilador y de las opciones del compilador.

En cualquier caso, su conclusión es correcta: nunca debe incluir/importar un archivo de implementación a otro archivo de implementación. Se encontrará con un error de implementación doble.

+0

Ah, ja, eso es fantástico; ¡ahora está mucho más claro y he resuelto mi problema con los enlazadores! ¡Muchas gracias! :) – Danny

Cuestiones relacionadas