Maison  >  Article  >  Opération et maintenance  >  Quelle est la différence entre les bibliothèques dynamiques et les bibliothèques statiques sous Linux

Quelle est la différence entre les bibliothèques dynamiques et les bibliothèques statiques sous Linux

青灯夜游
青灯夜游original
2021-11-23 11:08:506293parcourir

Différence : 1. La bibliothèque statique sera connectée au code cible lorsque le programme est compilé, et la bibliothèque statique ne sera plus nécessaire lorsque le programme est en cours d'exécution ; Le programme est compilé, mais il le sera. Il est chargé lorsque le programme est en cours d'exécution, la bibliothèque dynamique doit donc exister lorsque le programme est en cours d'exécution. 2. Les fichiers générés par les bibliothèques dynamiques sont relativement petits et les fichiers générés par les bibliothèques statiques sont relativement volumineux.

Quelle est la différence entre les bibliothèques dynamiques et les bibliothèques statiques sous Linux

L'environnement d'exploitation de ce tutoriel : système CentOS 6, ordinateur Dell G3.

Les similitudes et les différences entre les bibliothèques dynamiques et les bibliothèques statiques sous Linux

Mêmes points :

Les bibliothèques statiques et les bibliothèques dynamiques sont créées par des fichiers .o. Par conséquent, nous devons d'abord compiler le programme source dans un fichier .o via gcc

Différence :

1 Le temps de chargement du code est différent

  • La bibliothèque statique sera connectée au code cible ; lorsque le programme est compilé, La bibliothèque statique ne sera plus nécessaire lors de l'exécution du programme
  • La bibliothèque dynamique ne sera pas connectée au code cible lors de la compilation du programme, mais ne sera chargée que lorsque le programme est en cours d'exécution, donc lorsque le programme est en cours d'exécution, les bibliothèques dynamiques doivent également exister

2 Les règles de compilation sont différentes

  • Compilation de bibliothèque dynamique

Le nom de la bibliothèque de classes dynamiques est généralement libxxx.so, et la bibliothèque de fonctions dynamiques n'est pas compilée dans le code cible lors de la compilation, votre programme n'appelle la fonction correspondante dans la bibliothèque de fonctions que lorsqu'il atteint la fonction concernée, donc le fichier exécutable généré par la bibliothèque de fonctions dynamiques est relativement petit

Bibliothèque dynamique ; compilation : La chose la plus importante est une option de ligne de commande GCC, -shared Cette option spécifie de générer une bibliothèque de liens dynamiques, par exemple :

g++ -shared -o libd1.so d1.o /*Créer le fichier de bibliothèque dynamique d1.so basé sur le fichier cible intermédiaire d1.o*/

g++ - shared -o libd2.so d2.o /*Créer le fichier de bibliothèque dynamique d2.so basé sur le fichier cible intermédiaire d2.o*/

  • Compilation de bibliothèque statique

Le nom de la bibliothèque de classes est généralement libxxx.a ; utilisez la bibliothèque de fonctions statiques Le fichier compilé est relativement volumineux, car toutes les données de l'ensemble de la bibliothèque de fonctions seront intégrées dans le code cible. est évident, c'est-à-dire que le programme d'exécution compilé ne nécessite pas de support de bibliothèque de fonctions externe, car toutes les fonctions utilisées ont été compilées. Bien entendu, ce sera aussi son inconvénient, car si la bibliothèque de fonctions statiques change, votre programme devra être recompilé.

Sous UNIX, utilisez la commande ar pour créer ou exploiter une bibliothèque statique

ar Archivefile objfile

archivefile : archivefile est le nom de la bibliothèque statique

objfile : objfile est le nom du fichier cible intermédiaire avec l'extension .o, il peut y avoir plusieurs parallèles

Par exemple :

g++ -o hello.o -c hello.cpp
ar cqs libHello.a hello.o

Recommandations associées : "Tutoriel vidéo Linux"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn