Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: criskapunk en 23 Marzo 2011, 17:31 pm



Título: Duda sobre linker
Publicado por: criskapunk en 23 Marzo 2011, 17:31 pm
Buenas chicos!

Comencé a leer el libro Cómo programar en C/C++ de Deitel y me surgió una duda.

En el mismo dice que el compilador lo que hace es generar el código objeto dejando el espacio para las llamadas a las funciones de la biblioteca, de lo cual se encarga el linker.
Sin embargo, después dice que los archivos de cabecera contienen información que ayuda al compilador para saber si las llamadas a las funciones se hicieron de manera correcta.

Entonces, quién se encarga de comprobar si las llamadas a las funciones se hicieron correctamente? Quizás me estoy confundiendo y en el segundo caso está hablando de compilador refiriéndose a las dos fases (Compilación y enlazado).

Un saludo y perdón por tan idiota pregunta :-X


Título: Re: Duda sobre linker
Publicado por: ace332 en 24 Marzo 2011, 23:25 pm
El compilador hace esa comprobación utilizando para ello los archivos de cabecera. El linker por su parte combina los archivos objeto que resultaron de la compilación para crear el ejecutable.


Título: Re: Duda sobre linker
Publicado por: D4RIO en 25 Marzo 2011, 05:23 am
Para decirlo de otra forma, cuando el compilador lee un archivo de cabecera, encuentra declaraciónes de funciones. Si una función está declarada para recibir un entero como argumento, es porque el binario de esa función intentará obtener un entero de la pila.

Si compilamos un objeto con una función A() y luego modificamos el header con A(int a), entonces tendremos una incompatibilidad, pero el compilador no se dará cuenta porque el header dice que A() recibe un entero.

El linker básicamente combina los objetos y completa las tablas de símbolos respetando algunas reglas.

PERO: En realidad, el compilador puede dar por correcta la llamada a una función que en el .h está mal declarada, luego el linker fallará y te dirá que el símbolo no existe y será todo una catástrofe y luego te darás cuenta de que... el header estaba mal escrito.

Happy Hacking Girls...