Maison > développement back-end > C++ > Comment créer et utiliser des bibliothèques partagées dynamiques (DSL) en C sous Linux ?

Comment créer et utiliser des bibliothèques partagées dynamiques (DSL) en C sous Linux ?

Patricia Arquette
Libérer: 2024-12-04 00:25:12
original
994 Les gens l'ont consulté

How Do I Create and Use Dynamic Shared Libraries (DSLs) in C   on Linux?

Création et utilisation de bibliothèques partagées dynamiques en C sous Linux

Les bibliothèques partagées dynamiques (DSL) offrent un mécanisme puissant pour la réutilisation du code et la modularité en C. Ils permettent à plusieurs programmes de partager une seule copie du code de la bibliothèque, réduisant ainsi l'utilisation de la mémoire et améliorant les performances.

Création d'une bibliothèque partagée dynamique

Pour créer un DSL, vous devrez définir le classes et fonctions dans un fichier d'en-tête et un fichier d'implémentation, respectivement. Dans le fichier d'en-tête, déclarez votre classe avec des fonctions virtuelles pour empêcher les liaisons statiques. Dans le fichier d'implémentation, définissez les fonctions et fournissez des fonctions wrapper pour créer et détruire des objets.

// myclass.h
class MyClass {
public:
  virtual void DoSomething();

private:
  int x;
};

// myclass.cc
extern "C" MyClass* create_object() { return new MyClass; }
extern "C" void destroy_object(MyClass* object) { delete object; }
Copier après la connexion

Compilation et liaison

Sous Linux :

g++ -fPIC -shared myclass.cc -o myclass.so
Copier après la connexion

Sur Mac OS X :

g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
Copier après la connexion

Utilisation la bibliothèque partagée

Dans un exécutable séparé, chargez le DSL à l'aide de dlopen() et récupérez les pointeurs vers les fonctions create_object() et destroy_object(). Créez une instance de classe à l'aide de create_object(), utilisez les méthodes de classe et enfin appelez destroy_object() pour libérer la mémoire.

// class_user.cc
int main() {
  void* handle = dlopen("myclass.so", RTLD_LAZY);
  MyClass* (*create)();
  void (*destroy)(MyClass*);
  create = (MyClass* (*)())dlsym(handle, "create_object");
  destroy = (void (*)(MyClass*))dlsym(handle, "destroy_object");

  MyClass* myClass = (MyClass*)create();
  myClass->DoSomething();
  destroy(myClass);
}
Copier après la connexion

Compilation et liaison :

Sous Linux :

g++ class_user.cc -ldl -o class_user
Copier après la connexion

Sous Mac OS X :

g++ class_user.cc -o class_user
Copier après la connexion

Exemple de code

L'exemple fourni montre comment créer une bibliothèque de classes partagée, la charger dans un exécutable séparé et utiliser la fonctionnalité de classe. Le concept principal consiste à définir des classes et des fonctions, à créer des fonctions wrapper pour la création et la destruction d'objets, à charger la bibliothèque et à appeler des méthodes de classe.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal