Créer une bibliothèque statique et dynamique en C en utilisant gcc sur des sites bitcoin Linux

Les liens statiques et dynamiques sont deux processus de collecte et de combinaison de plusieurs fichiers objet afin de créer un seul exécutable. La liaison peut être effectuée à la fois lors de la compilation, lorsque le code source est converti en code machine et lors du chargement, lorsque le programme est chargé en mémoire et exécuté par le chargeur, et même au moment de l’exécution, par les programmes d’application. Et, il est exécuté par des programmes appelés linkers. Les linkers sont aussi appelés éditeurs de liens. La liaison est effectuée lors de la dernière étape de la compilation d’un programme. Dans ce tutoriel, les liens statiques et dynamiques avec les modules C seront abordés.

Linker est un logiciel système qui joue un rôle crucial dans le développement logiciel car il permet une compilation séparée.


Au lieu d’organiser une application volumineuse sous la forme d’un fichier source monolithique, vous pouvez la décomposer en morceaux plus petits, plus faciles à gérer, pouvant être modifiés et compilés séparément. Lorsque vous modifiez l’un des modules, il vous suffit de le recompiler et de relier l’application, sans recompiler les autres fichiers source.

Pendant la liaison statique, l’éditeur de liens copie toutes les routines de bibliothèque utilisées dans le programme dans l’image exécutable. Bien entendu, cela prend plus d’espace sur le disque et en mémoire que la liaison dynamique. Toutefois, la liaison statique est plus rapide et plus portable car elle ne nécessite pas la présence de la bibliothèque sur le système sur lequel elle s’exécute.

D’autre part, dans la liaison dynamique, le nom de bibliothèque partageable est placé dans l’image exécutable, tandis que la liaison réelle a lieu au moment de l’exécution, lorsque l’exécutable et la bibliothèque sont placés en mémoire. La liaison dynamique offre l’avantage de partager une seule bibliothèque partageable entre plusieurs programmes.

Note: objet des dossiers venez dans trois savors à savoir relogeable, exécutable et partagé. Les fichiers objet relocalisables contiennent du code et des données sous une forme qui peut être combinée avec d’autres fichiers objet de ce type lors de la compilation pour créer un fichier objet exécutable. Ils se composent de différentes sections de code et de données. Les instructions sont dans une section, les variables globales initialisées dans une autre section et les variables non initialisées dans une autre section. Les fichiers objet exécutables contiennent du code binaire et des données sous une forme qui peut être directement copiée en mémoire et exécutée. Les fichiers objets partagés sont des fichiers pouvant être chargés en mémoire et liés dynamiquement, au chargement ou à l’exécution, par un éditeur de liens.

À travers cet article, les liens statiques et dynamiques seront expliqués. exploitation minière Bitcoin Dépôt tanpa gratuit Lors de la création de liens, l’éditeur de liens se plaint des définitions de fonctions manquantes, le cas échéant. Lors de la compilation, si le compilateur ne trouve pas de définition de fonction pour un module particulier, il suppose simplement que la fonction est définie dans un autre fichier et la traite comme une référence externe. Le compilateur n’examine pas plus d’un fichier à la fois. Considérant que, l’éditeur de liens peut examiner plusieurs fichiers et rechercher des références pour les modules qui n’ont pas été mentionnés. Les processus séparés de compilation et de liaison réduisent la complexité du programme et permettent de décomposer le code en éléments plus petits, plus faciles à gérer.

La liaison statique est le processus de copie de tous les modules de bibliothèque utilisés dans le programme dans l’image exécutable finale. Ceci est effectué par l’éditeur de liens et est effectué à la dernière étape du processus de compilation. bitcoin timeline L’éditeur de liens associe des routines de bibliothèque au code du programme afin de résoudre les références externes et de générer une image exécutable adaptée au chargement en mémoire.

Voyons les liens statiques par exemple. Ici, nous allons prendre un exemple très simple d’ajout de deux quantités entières pour illustrer le processus de liaison statique. Nous allons développer un module add et le placer dans un fichier add.c séparé. Le prototype du module add sera placé dans un fichier séparé appelé add.h. Le fichier de code addDemo.c sera créé pour illustrer le processus de liaison.

Maintenant que nous savons comment créer un fichier d’objet exécutable à partir de plusieurs fichiers d’objet binaire. Il est temps de connaître les bibliothèques. Dans la section suivante, nous verrons quelles bibliothèques sont en cours de développement logiciel. Comment sont-ils créés? Quelle est leur signification dans le développement de logiciels? Comment sont-ils utilisés, et beaucoup de choses qui ont rendu l’utilisation des bibliothèques beaucoup plus évidente dans le développement de logiciels?

Les bibliothèques statiques et partagées sont simplement des collections de fichiers d’objet binaire qu’elles aident lors de la liaison. Une bibliothèque contient des centaines ou des milliers de fichiers objets. Lors de la démonstration de addDemo, nous avions deux fichiers objets, à savoir add.o et addDemo.o. Il est possible que vous ayez au moins dix fichiers objet à lier afin d’obtenir le fichier objet exécutable final. Dans ces situations, vous vous retrouverez énervé et vous devrez chaque fois spécifier une longue liste de fichiers objets afin d’obtenir l’objet exécutable final. fichier. De plus, les fichiers d’objets sans clôture seront difficiles à gérer. Les bibliothèques résolvent toutes ces difficultés et vous aident à garder l’organisation des fichiers objets simple et facile à gérer.

Statique Les bibliothèques sont expliquées ici, les bibliothèques dynamiques seront expliquées avec la liaison dynamique. Les bibliothèques statiques sont un ensemble de fichiers objet déplaçables. Ils ont généralement une extension .a. Pour démontrer l’utilisation de bibliothèques statiques, nous allons développer davantage l’exemple addDemo. Jusqu’ici, nous avons add.o qui contient le code d’objet binaire de la fonction add que nous avons utilisé dans addDemo. Pour une démonstration plus explicative de l’utilisation des bibliothèques, nous créerions un nouveau fichier d’en-tête heymath.h et ajouterons les signatures de deux fonctions add, sub à that.

Si vous voyez, nous avons remplacé la première déclaration #include par #include. Parce que heymath.h contient maintenant les signatures des deux fonctions add et sub et ajoute une instruction printf supplémentaire qui appelle la sous-fonction pour afficher la différence entre les variables x et y.

L’option -L demande à l’éditeur de liens de rechercher les bibliothèques dans l’argument suivant (comme nous l’avons fait pour -I). Nous avons donc créé une bibliothèque statique. Mais ce n’est pas la fin. Les systèmes utilisent également beaucoup de bibliothèques dynamiques. C’est le bon moment pour en discuter.

La liaison dynamique retarde une bonne partie du processus de liaison jusqu’à ce qu’un programme commence à s’exécuter. Il effectue le processus de liaison à la volée au fur et à mesure que les programmes sont exécutés dans le système. Pendant la liaison dynamique, le nom de la bibliothèque partagée est placé dans le fichier exécutable final, tandis que la liaison réelle a lieu au moment de l’exécution, lorsque le fichier exécutable et la bibliothèque sont placés dans la mémoire. Le principal avantage de l’utilisation de bibliothèques liées dynamiquement est que la taille des programmes exécutables est considérablement réduite, car chaque programme n’a pas à stocker de copies redondantes des fonctions de bibliothèque qu’il utilise. En outre, lorsque les fonctions de DLL sont mises à jour, les programmes qui les utilisent obtiennent automatiquement leurs avantages.

Une bibliothèque partagée (sous Linux) ou une bibliothèque de liens dynamiques (dll sous Windows) est un ensemble de fichiers objets. Dans la liaison dynamique, les fichiers objets ne sont pas combinés avec les programmes au moment de la compilation et ne sont pas copiés de manière permanente dans le fichier exécutable final. par conséquent, une bibliothèque partagée réduit la taille de l’exécutable final.

Bibliothèques partagées ou dynamique Les bibliothèques de liens (dll) constituent un avantage considérable en partageant une copie unique de la bibliothèque entre plusieurs programmes. Elles sont donc appelées bibliothèques partagées et leur processus de liaison avec plusieurs programmes est appelé liaison dynamique.

Les bibliothèques partagées sont chargées en mémoire par les programmes au démarrage. Lorsqu’une bibliothèque partagée est chargée correctement, tous les programmes qui démarrent plus tard utilisent automatiquement la bibliothèque partagée déjà chargée. Le texte suivant montre comment créer et utiliser une bibliothèque partagée sous Linux.

Continuons avec l’exemple précédent de add et de sous-modules. Comme vous vous en souvenez, nous avions deux fichiers objets add.o et sub.o (compilés à partir de add.c et sub.c) contenant le code des méthodes add et sub respectivement. Mais nous devrons recompiler add.c et sub.c à nouveau avec l’option -fpic ou l’option -fPIC. L’option -fPIC ou -fpic permet la génération de code indépendant de la position, une condition requise pour les bibliothèques partagées. Utilisez -fPIC ou -fpic pour générer du code. Quelle option doit être utilisée, -fPIC ou -fpic pour générer du code dépendant de la cible. Le choix -fPIC fonctionne toujours, mais peut produire un code plus gros que -fpic. L’utilisation de l’option -fpic génère généralement un code plus petit et plus rapide, mais présente des limitations dépendant de la plate-forme, telles que le nombre de symboles globalement visibles ou la taille du code. où acheter bitcoin en ligne Le lieur vous dira s’il vous convient si vous créer la bibliothèque partagée. En cas de doute, je choisis -fPIC, parce que ça marche toujours. Ainsi, lors de la création de la bibliothèque partagée, vous devez recompiler add.c et sub.c avec les options suivantes: [racine @ hôte ~] # gcc -Wall -fPIC -c add.c [racine @ hôte ~] # gcc -Wall -fPIC -c sub.c

Les commandes ci-dessus produiront deux nouveaux fichiers d’objet dans le répertoire courant add.o et sub.o. L’option d’avertissement -Wall active les avertissements pour de nombreuses erreurs courantes et doit toujours être utilisée. Il combine un grand nombre d’autres options d’avertissement, plus spécifiques, qui peuvent également être sélectionnées individuellement. Pour plus de détails, vous pouvez consulter la page de manuel des avertissements spécifiés.

Cette bibliothèque partagée nouvellement créée, libheymath.so, peut être utilisée en remplacement de libheymath.a. Mais utiliser un partage bibliothèque n’est pas aussi simple que l’était la bibliothèque statique. Une fois que vous avez créé une bibliothèque partagée, vous devez l’installer. Enfin, l’installation la plus simple consiste à copier la bibliothèque dans l’un des répertoires standard (par exemple, / usr / lib) et à exécuter la commande ldconfig.

Vous pouvez répertorier les dépendances de bibliothèques partagées dont dépend votre exécutable. La commande ldd le fait pour vous. [root @ host ~] # addition de ldd libheymath.so = /usr/lib/libheymath.so (0x00002b19378fa000) libc.so.6 = /lib64/libc.so (0x00002b1937afb000) / lib64 / ld-linux-x86- 64.so.2 (0x00002b19376dd000) dernier mot

Dans ce tutoriel, nous avons expliqué comment les liaisons statiques et dynamiques en C sont effectuées pour les bibliothèques statiques et partagées (Dynamic Link Libraries – DLLs). J’espère que vous avez apprécié la lecture de ce tutoriel. S’il vous plaît écrivez-nous si vous avez des suggestions / commentaires ou rencontrez une erreur sur cette page. Merci d’avoir lu!