• # Dynamique vs statique

    Posté par (site web personnel) . En réponse au message probleme pour comprendre l'édition de lien. Évalué à 7. Dernière modification le 20 janvier 2019 à 20:34.

    $ cat bonjour.c 
    #include <stdio.h>
    int main(){
     fprintf(stdout, "bonjour");
     return 0;
    }
    $ gcc -o bonjour_dyn bonjour.c
    $ ldd bonjour_dyn 
     linux-vdso.so.1 (0x00007ffd071a9000)
     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f33a5de3000)
     /lib64/ld-linux-x86-64.so.2 (0x00007f33a5fdc000)
    $ ls -nhl bonjour_dyn
    -rwxr-xr-x 1 1000 1000 17K janv. 20 20:20 bonjour_dyn
    $ /sbin/ldconfig --help
    Usage : ldconfig [OPTION...]
    Configuration dynamique des éditions de liens lors de l'exécution.
    $ gcc -static -o bonjour_sta bonjour.c
    $ ldd bonjour_sta
     n'est pas un exécutable dynamique
    $ ls -nhl bonjour_sta
    -rwxr-xr-x 1 1000 1000 738K janv. 20 20:21 bonjour_sta

    Dans le premier cas, la fonction est fournie dynamiquement. Dans le second cas, elle est embarquée dans le binaire. Avec des conséquences sur la taille du binaire, la disponibilité de la bibliothèque à l'exécution, la possibilité de remplacer cette bibliothèque pour correction ou par malveillance, etc.

    Pour aller plus loin (mais ça devient plus technique), une discussion twitter récente #prod365 #fr Un peu de #linux #internals: quels sont les mécanismes du #kernel pour lire et executer un programme?