elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda sobre linker
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre linker  (Leído 4,068 veces)
criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Duda sobre linker
« 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


En línea

ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Duda sobre linker
« Respuesta #1 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.


En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Duda sobre linker
« Respuesta #2 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...
En línea

OpenBSDFreeBSD
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alguien me puede decir q tal es el G6FLASH LINKER -=256M=-
Juegos y Consolas
Lancipote 1 1,461 Último mensaje 22 Febrero 2005, 06:14 am
por davidmorom
Help, porfa: [Linker error] undefined reference to '.......
ASM
codeliber 5 9,100 Último mensaje 3 Octubre 2009, 00:26 am
por Eternal Idol
Problemas con el linker
GNU/Linux
El_Java 3 3,497 Último mensaje 3 Julio 2012, 18:46 pm
por Foxy Rider
Linker en VC++
Programación C/C++
eleon 0 1,607 Último mensaje 24 Julio 2012, 15:16 pm
por eleon
Problema con linker script
Programación General
Khronos14 4 3,403 Último mensaje 6 Septiembre 2012, 15:16 pm
por Khronos14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines