Comme une librairie archive, une librairie partagée contient du code objet réutilisable. Cependant, ld traite les librairies partagées d'une manière un peu différente. Quand il fait un lien entre un fichier objet et une librairie partagée, ld ne copie pas le code objet de la librairie partagée dans le fichier a.out; à la place, l'éditeur de lien note simplement dans le fichier a.out que le code appelle une fonction dans la librairie partagée. Un fichier a.out qui appelle les fonctions d'une librairie partagée est vu comme un exécutable incomplet.
Lorsqu'un exécutable incomplet commence l'exécution, le chargeur dynamique ( dynamic loader) regarde le fichier a.out pour voir quelles sont les librairies dont ce fichier a besoin lors de son exécution. Le chargeur dynamique charge chaque librairie nécessaire dans l'espace d'adressage du processus, on dit qu'il attache la librairie. Un programme appelle les fonctions des librairies partagées indirectement à travers une table que le chargeur dynamique remplit avec l'adresse de ces fonctions. Par défaut, le chargeur dynamique place l'adresse des fonctions des librairies partagées lorsque la fonction est appelée. Un lien immédiat est aussi possible, tous les symboles nécessaires dans la librairie partagée sont alors liés au démarrage du programme. Dans chaque cas, les fonctions qui sont déjà chargées sont partagées.
Par conséquent, faire une édition de lien avec des librairies partagées permet généralement d'avoir des fichiers a.out plus petits qu'avec les librairies archives. Le bénéfice que l'on peut tirer de l'utilisation des librairies partagées est la réduction de l'espace disque et de la mémoire virtuelle nécessaire au programme.