Si las firmas de las funciones involucradas no han cambiado, entonces "reconstruir" el programa significa que los archivos del objeto deben ser vinculados nuevamente. No debería necesitar compilar ellos de nuevo.
Una API es un contrato que describe la interfaz a las funciones públicas en una biblioteca. Cuando el compilador genera código, necesita saber qué tipo de variables pasar a cada función y en qué orden. También necesita saber el tipo de devolución, por lo que conoce el tamaño y el formato de los datos que se devolverán desde la función. Cuando se compila el código, la dirección de una función de biblioteca puede representarse como "inicio de la biblioteca, más 140 bytes". El compilador no conoce la dirección absoluta, por lo que simplemente especifica un desplazamiento desde el principio de la biblioteca.
Pero dentro de la biblioteca, los contenidos (es decir, las implementaciones de las funciones) pueden cambiar. Cuando eso sucede, la longitud del código puede cambiar, por lo que las direcciones de las funciones pueden cambiar. El trabajo del vinculador es comprender dónde residen los puntos de entrada de cada función y completar esas direcciones en el código objeto para crear el ejecutable.
Por otro lado, si los estructuras de datos en la biblioteca han cambiado y la biblioteca requiere las personas que llaman a gestionar la memoria (una mala práctica, pero, por desgracia común), entonces se necesidad de volver a compilar el código para puede dar cuenta de los cambios. Por ejemplo, si su código usa malloc(sizeof(dataStructure))
para asignar memoria a una estructura de datos de biblioteca que se ha duplicado, debe volver a compilar su código porque sizeof(dataStructure)
tendrá un valor mayor.
Muy similar a http://stackoverflow.com/a/10269818/841108 –