¿Cuál es la diferencia entre bibliotecas vinculadas estáticamente y bibliotecas cargadas dinámicamente?

Para ilustrar con un ejemplo.

Digamos que tiene un sistema operativo con una llamada gethostbyname () que solo lee desde /etc/hosts.txt. (Dicho sistema operativo es muy antiguo, pero tengan paciencia conmigo). Desea actualizarlo para usar un servidor de nombres y desea cambiar cada programa que use esa llamada para usar el servidor de nombres.

Si tiene bibliotecas vinculadas estáticamente, debe reconstruir todos los programas que usan esa biblioteca y recompilarla (o al menos volver a vincularla, si tiene archivos .o por alguna razón). Pero si tiene bibliotecas cargadas dinámicamente, puede arreglar la rutina en la biblioteca sin volver a compilar.

Las bibliotecas vinculadas estáticamente darán como resultado archivos de mayor tamaño para sus archivos binarios que las bibliotecas vinculadas dinámicamente, ya que cada ejecutable tendrá esas rutinas de biblioteca vinculadas.

Lea lo siguiente que tiene buenas explicaciones:

Cuándo usar bibliotecas dinámicas frente a bibliotecas estáticas

Las bibliotecas estáticas aumentan el tamaño del código en su binario. Siempre se cargan y cualquier versión del código que compiló es la versión del código que se ejecutará.
Las bibliotecas dinámicas se almacenan y versionan por separado. Es posible que se cargue una versión de la biblioteca dinámica que no era la original que se envió con su código si la actualización se considera compatible con la versión original.
Además, las bibliotecas dinámicas no se cargan necesariamente, generalmente se cargan cuando se llaman por primera vez, y se pueden compartir entre componentes que usan la misma biblioteca (múltiples cargas de datos, una carga de código).
La mayoría de las veces se consideraba que las bibliotecas dinámicas eran el mejor enfoque, pero originalmente tenían una falla importante (google DLL hell), que prácticamente ha sido eliminada por los sistemas operativos Windows más recientes (Windows XP en particular).

Por favor lea también:

Bibliotecas de Linux estáticas, compartidas, dinámicas y cargables

Bibliotecas estáticas y dinámicas | Conjunto 1 – GeeksforGeeks

Las bibliotecas dinámicas se cargan en tiempo de ejecución y reducen el tamaño binario.
Las bibliotecas estáticas están vinculadas durante el tiempo de compilación, aumenta el tamaño binario pero reduce las dependencias.
El uso de bibliotecas estáticas aumenta ligeramente el rendimiento, ya que hay un poco de sobrecarga al cargar la biblioteca dinámica en tiempo de ejecución.

Para las bibliotecas enlazadas estáticamente, el enlazador recoge las rutinas que su programa requiere de la biblioteca y las coloca directamente en el archivo binario que está produciendo. Realiza las ediciones de enlaces para que su programa llame al código de la biblioteca.

Para las bibliotecas vinculadas dinámicamente, el vinculador recoge la versión de la biblioteca que está actualmente disponible y registra esa versión, más el nombre de la biblioteca en la imagen. En el momento de la carga, el cargador debe encontrar esa biblioteca, asegurarse de que sea la versión correcta y luego asignarla a la ubicación correcta en el espacio de direcciones del programa.

More Interesting

Cómo recordar los valores máximos de int corto, largo con signo y sin signo, flotante, doble en C ++

¿Cuáles son las posibles razones para ser rechazado por una pasantía de programación después de una entrevista telefónica y escribir el código correcto?

Cómo adaptar mi currículum a un puesto de trabajo específico

¿Cómo se clasifican mil millones de filas de datos de enteros (unos pocos gigabytes) en un archivo con solo 1024 KB de memoria principal?

¿Qué preguntas puedo hacerle a un gerente general o programador senior para impresionarlos en una entrevista de programación de nivel básico?

¿Hay una laguna en el procedimiento de entrevista de TI?

¿Por qué las grandes compañías tecnológicas como Google / Amazon / FB no hacen que sus entrevistas de codificación de pantalla de teléfono sean más estrictas?

Tengo una semana antes de una entrevista telefónica con IONOS Networks. ¿Qué tipo de preguntas debo esperar?

Cómo aprender a programar y desarrollar un interés en escribir códigos

¿Qué tipo de preguntas de entrevista puedo esperar si elijo circuitos electrónicos analógicos y circuitos microelectrónicos?

¿Cómo debo prepararme para las preguntas de concurrencia que se hacen en las entrevistas de Dropbox?

¿Cómo debería uno responder una pregunta como: cuántas líneas de código ha escrito hasta la fecha?

Cómo saber qué error cometiste en una entrevista después de ser rechazado

¿Cuáles son los conceptos que podrían ayudar a descifrar una entrevista de Google que no sean estructuras de datos y algoritmos?

¿Cuáles son sus experiencias de entrevista con empresas tecnológicas en Bangalore?