Hace la vinculación y la carga de las librerías dinámicas tanto sucede en tiempo de ejecución?
o es que sólo la carga de la biblioteca ocurre en tiempo de ejecución?

stackoverflow.com/questions/311882/…
que no es un duplicado exacto

OriginalEl autor Vijay | 2009-12-23

7 Comentarios

  1. 18

    Véase el anterior punto muy bueno acerca de la distinción entre la vinculación estática y dinámica de la vinculación. Suponiendo que se refiere a la vinculación dinámica, entonces:

    Tanto de la carga y (dinámico) de los que la vinculación se realiza por el enlazador – en linux y otros Unix semejanza esto se hace por /lib/ld.so, que es el programa que se inicia el sistema operativo en casi todos los casos. ld.so a su vez cargas su aplicación mygameBinary en la memoria, y ld.so, a continuación, lee el archivo mygameBinary la lista de bibliotecas de enlaces dinámicos que se requiere.

    El enlazador, ld.so, entonces las cargas de cada una de estas bibliotecas en la memoria en vez, por ejemplo,libc.so, libpthread.so, libopengl.so, y mira lo que otras bibliotecas estos puede requerir, por ejemplo,libm.so.

    Una vez carga se hace, entonces vinculación comienza un proceso de búsqueda en el nombre de los objetos o funciones de las que son exportado por una biblioteca o de la aplicación, y importados por otra biblioteca o de la aplicación. El vinculador, a continuación, cambia varias referencias, y a veces el código para actualizar desvinculados punteros de datos y llamadas a la función en cada biblioteca al punto donde los datos reales o función reside. Por ejemplo, una llamada a printf en mygameBinary comienza apuntando a nada (en realidad se llama el linker), pero después de la vinculación se convierte en un salto a la printf función en libc.

    Una vez que esta vinculación es completa, se inicia la aplicación, mediante la invocación de la _start función en mygameBinary, que, a continuación, llama main, y el juego comienza.

    La vinculación dinámica en este camino es necesario para apoyar los siguientes:

    • biblioteca de actualizaciones después de la aplicación se publica, que el cambio de la ubicación de funciones y datos.
    • única aplicación que se ejecuta en diferentes versiones del sistema operativo
    • incertidumbre sobre el rumbo de la biblioteca o de la aplicación puede ser cargado en la memoria
    • reducir el tamaño del núcleo mediante el intercambio físico de la memoria ram utilizada por las bibliotecas entre varias aplicaciones.

    Algunos Sos difieren en los detalles, por ejemplo OSX y AIX tanto en la pre-carga de un determinado conjunto de las bibliotecas en lugares fijos en la memoria. Esto significa que no necesita ser cargado, sólo vinculadas, lo que puede ser más rápido.

    Algunas Sos como OSX y a veces el soporte de Linux pre-linking, que es un proceso donde una secuencia de comandos se ejecuta sobre las aplicaciones en su sistema antes de lanzarlos, y no el enlace. Cuando se inicia ellos, entonces usted no necesita a link. Esto es importante porque vinculación toma una cantidad considerable de la hora del equipo cuando se inicia una aplicación, y algunas aplicaciones puede ser lanzado varias veces por segundo, como gcc, cpp y as durante la aplicación del proceso de construcción, o filtro de scripts cuando indexación de sus datos del equipo (OSX Spotlight).

    OriginalEl autor Alex Brown

  2. 6

    La vinculación es el proceso de tomar algunos de los más pequeños ejecutables y unirse a ellos juntos como una sola más grande ejecutable.

    De carga se carga el ejecutable en la memoria antes de la ejecución.

    Él está preguntando acerca de la dinámica de las bibliotecas, en caso de que el enlace NO es el proceso de inclusión de pequeños «ejecutables» en una más grande.

    OriginalEl autor James Anderson

  3. 3

    Hay dos tipos de vinculación: la vinculación estática y dinámica vincular.

    Vinculación estática se produce en tiempo de compilación, por lo que se produce antes de la carga de un programa. Con la vinculación estática los símbolos externos que son utilizados por el programa (por ejemplo, nombres de función) se resuelve en tiempo de compilación.

    Vinculación dinámica se produce en tiempo de ejecución, por lo que se produce después o en el momento de la carga de un programa. Con la vinculación dinámica de los símbolos que se resuelven en tiempo de carga, o en tiempo de ejecución cuando el símbolo se accede (perezoso de unión). El último es el más común.

    OriginalEl autor Wizzard

  4. 1

    file01.c, file02.c –> produce –> file01.oh, file02.o –> Estos .o las informaciones son apaleados y poner en una sola biblioteca dinámica, que es lib1.un
    file11.c, file12.c –> produce –> file11.oh, file12.o –> Estos .o las informaciones son apaleados y poner en una sola biblioteca dinámica, que es lib2.un

    Ahora, tengo 2 bibliotecas, que finalmente se interrelacionan para generar el ejecutable (como .elf o .mot or .fls). Este proceso de relacionar la información de lib1.una y lib2.para formar un único archivo ejecutable que se llama la vinculación.

    Ahora, tengo que cargar en la memoria con el fin de ejecutarlo para ver el comportamiento de la aplicación final. El proceso de cargar el ejecutable final (como .elf o .mot or .fls) en la memoria de fin de carrera que se llama carga.

    Espero que esto sería clara la importancia de la vinculación y de la carga (sin embargo, las definiciones no son las adecuadas :-)).

    sé que el proceso de vinculación y carga …lo que necesito es que uno de ellos pasará primero y por qué?
    Es definitivamente la vinculación que ocurra primero… lo cual nos da el ejecutable final… que será cargada para la ejecución… así que la vinculación de primero, seguido por la carga… por cierto, perdón por el retraso en la respuesta… 🙂

    OriginalEl autor wrapperm

  5. 1

    Tanto sucede en tiempo de ejecución para las bibliotecas dinámicas.

    Primero, las bibliotecas se cargan, junto con todas sus dependencias (y los de las bibliotecas de las dependencias, y así sucesivamente). A continuación, el enlazador dinámico resuelve los símbolos en la carga de las bibliotecas. Por lo general, ambos de estas funciones son ejecutadas por la misma pieza de software en Linux es ld.así.

    Símbolos en las bibliotecas estáticas se resuelven en tiempo de vínculo y se incluyen en el archivo ejecutable. Las bibliotecas estáticas pueden, sin embargo, no han resuelto los símbolos que se cumplen en tiempo de ejecución por las bibliotecas dinámicas.

    Hay una descripción en profundidad de cómo sucede esto, cómo los nombres de hash, lo caro que es para resolver los símbolos en tiempo de ejecución, etc. en Cómo Escribir Bibliotecas Compartidas.

    OriginalEl autor Todd Gamblin

  6. -1

    Los sistemas Windows y Unix completamente diferentes enfoques para las bibliotecas Dinámicas.

    Archivos Dll de Windows no están vinculados. Por lo tanto, usted no puede compartir objetos estáticos a través de Dll. Es como un programa independiente en su espacio de direcciones.

    Unix objetos compartidos son realmente «vinculados» en tiempo de ejecución, así como los diferentes módulos de un mismo proyecto, la realización de símbolo de la resolución.

    No es correcto, archivos Dll de Windows están vinculados y pueden compartir datos.
    nobugz: sugiero que la búsqueda de entrada para «vincular» y cómo símbolo de resolución de las obras. Usted verá por qué no hay forma de compartir una variable estática a través de DLL límite.

    OriginalEl autor Pavel Radzivilovsky

  7. -1

    Tanto la vinculación dinámica y de la biblioteca de la carga de suceder en tiempo de ejecución, pero la vinculación dinámica se realiza antes de la ejecución del programa y se realiza por el sistema de linker. Así, por ejemplo, si se requiere librerías que faltan, el programa no puede ser ejecutado. La biblioteca de la carga, por otro lado, es realizado por el programa en sí, a través de dlopen/funciones LoadLibrary. En este caso, el proceso de carga es controlada por la aplicación, que puede, por ejemplo, el manejo de errores.

    así que cuando hace la carga de suceder entonces?es que antes de la fase de vinculación(en el caso de la vinculación dinámica)
    En el caso de la carga, la biblioteca se carga cuando el programa llama a dlopen/función LoadLibrary. Esto puede suceder cuando el programador quiere;)

    OriginalEl autor el.pescado

Dejar respuesta

Please enter your comment!
Please enter your name here