Explication détaillée de la compilation g++ et de l'utilisation des bibliothèques statiques et dynamiques sous Linux

黄舟
Libérer: 2017-05-28 11:32:40
original
4657 Les gens l'ont consulté

L'éditeur ci-dessous vous apportera un articleCompilation G++ et utilisation sous LinuxStatiqueLe méthode de bibliothèque et bibliothèque dynamique. L'éditeur pense que c'est plutôt bien, je vais donc la partager avec vous maintenant et lui donner une référence.

Dans l'environnement WindowsDans le cadre du projet, nous Nous développons généralement des projets C++ dans des IDE tels que VS. Nous pouvons être familiers avec la génération et l'utilisation de bibliothèques statiques (*.lib) et de bibliothèques dynamiques (*.dll). un autre ensemble de modes. Les bibliothèques statiques (*.a) et dynamiques correspondantes (*.so) sont générées et utilisées de différentes manières. Vous n'êtes peut-être pas à l'aise avec cela au début, mais vous devriez l'utiliser davantage. habitué à ce genre d'utilisation, car les étapes ne sont pas aussi compliquées que la configuration sous VS

Voici un résumé des méthodes de génération et d'utilisation des bibliothèques statiques et des bibliothèques dynamiques sous Linux : (Depuis c'est un projet C++, donc le compilateur utilise g++, mais c'est la même chose que l'utilisation de gcc)

Le premier est le travail de préparation, qui consiste à encapsuler le fonctions dont nous avons besoin dans un fichier de bibliothèque. Le fichier d'en-tête et le fichier source sont écrits comme suit :

//myAPI.h 
int ADD(int a, int b); 
int MINUS(int a, int b);
Copier après la connexion
//myAPI.cpp 
#include "myAPI.h" 
 
int ADD(int a, int b){ 
  return a + b; 
} 
 
int MINUS(int a, int b){ 
  return a - b; 
}
Copier après la connexion

Ensuite, préparez un fichier source de fonction principale pour les tests :

//main.cpp 
#include "myAPI.h" 
#include <iostream> 
 
int main(){ 
  std::cout << "1 + 1 = " << ADD(1, 1) << std::endl; 
  std::cout << "1 - 1 = " << MINUS(1, 1) << std::endl; 
  return 0; 
}
Copier après la connexion

Enfin, compilez notre Le fichier myAPI.cpp génère le fichier cible myAPI.o

g++ -c myAPI.cpp
Copier après la connexion

1. Générez une bibliothèque statique et utilisez <🎜. >

pour générer une bibliothèque statique sous Linux La commande ar traite le fichier myAPI.o pour générer un fichier de bibliothèque statique. Le fichier de bibliothèque généré doit suivre les spécifications, et le fichier de bibliothèque sous Linux doit être préfixé par ". lib". Par conséquent, pour cet exemple, la bibliothèque statique libmyAPI.a peut être générée via la commande suivante :

ar crv libmyAPI.a myAPI.o
Copier après la connexion
Ensuite, vous pouvez utiliser la bibliothèque statique pendant le processus de compilation du projet. À ce stade, le fichier de définition de la fonction bibliothèque myAPI.cpp n'est plus nécessaire. La commande de compilation main.cpp est la suivante (notez que les dépendances sont les suivantes. Les fichiers de bibliothèque statiques doivent être placés après les dépendances) :

g++ main.cpp libmyAPI.a -o output
Copier après la connexion
Une fois la compilation réussie, la sortie du fichier exécutable peut être exécutée. À ce stade, libmyAPI.a n'est plus nécessaire pour exécuter la commande et afficher les résultats comme suit :

./output
Copier après la connexion
Copier après la connexion
<. 🎜>

2. Générer une bibliothèque dynamique et utiliser pour passer lors de la compilation sous Linux Le paramètre -shared peut générer une bibliothèque dynamique ( .so), comme suit

. La bibliothèque dynamique générée doit être déclarée lors de la compilation et doit dépendre de celle-ci pendant l'exécution. La déclaration est la suivante
g++ -shared -fPIC -o libmyAPI.so myAPI.o
Copier après la connexion

. . L'indicateur "-L." indique à G++ que la bibliothèque de fonctions peut être située dans le répertoire courant ; utilisez l'indicateur "-lmyAPI" pour indiquer au programme G++
g++ main.cpp -L. -lmyAPI -o output
Copier après la connexion
pilote

de référencer la bibliothèque de fonctions partagée . libmyAPI.so pendant la phase de liaison. Si l'erreur suivante s'affiche lors de son utilisation, déplacez simplement libmyAPI.so vers le répertoire /usr/lib :

./output
Copier après la connexion
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!