Heim > Backend-Entwicklung > C++ > Wie kann ich Dynamic Shared Libraries (DSLs) in C unter Linux erstellen und verwenden?

Wie kann ich Dynamic Shared Libraries (DSLs) in C unter Linux erstellen und verwenden?

Mary-Kate Olsen
Freigeben: 2024-12-05 20:24:12
Original
475 Leute haben es durchsucht

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

Erstellen und Verwenden dynamischer gemeinsam genutzter Bibliotheken in C unter Linux

Dynamische gemeinsam genutzte Bibliotheken (DSLs) ermöglichen mehreren Programmen die gemeinsame Nutzung von Code und reduzieren so die Speichernutzung und Verbesserung der Effizienz. In C ermöglichen DSLs die Erstellung wiederverwendbarer Klassenbibliotheken, auf die mehrere ausführbare Dateien zugreifen können.

Erstellen der DSL

Um eine DSL zu erstellen, definieren Sie die Klassenschnittstelle und die Implementierung im Header und Quelldateien (z. B. myclass.h und myclass.cc). Stellen Sie sicher, dass die Klasse einen virtuellen Destruktor und öffentliche Methoden mit der Bezeichnung extern „C“ enthält, um das Laden von Symbolen zu erleichtern.

Verwenden des DSL

Um einen DSL in einer separaten ausführbaren Datei zu verwenden, Führen Sie die folgenden Schritte aus:

  1. Beziehen Sie die erforderlichen Bibliotheken () ein und Header.
  2. Verwenden Sie dlopen(), um die gemeinsam genutzte Bibliothek zu laden.
  3. Greifen Sie mit dlsym() auf die Funktionen und Symbole der Bibliothek zu.
  4. Rufen Sie die Funktion create_object() auf, um eine zu instanziieren Objekt aus der Bibliotheksklasse.
  5. Rufen Sie die Methoden des Objekts auf.
  6. Zerstören Sie das Objekt mit destroy_object().

Beispiel Code

myclass.h

#include <iostream>

class MyClass {
public:
  MyClass();
  virtual void DoSomething();
private:
  int x;
};
Nach dem Login kopieren

myclass.cc

#include "myclass.h"

extern "C" MyClass* create_object() {
  return new MyClass;
}

extern "C" void destroy_object(MyClass* object) {
  delete object;
}

MyClass::MyClass() {
  x = 20;
}

void MyClass::DoSomething() {
  std::cout << x << std::endl;
}
Nach dem Login kopieren

class_user .cc

#include <dlfcn.h>
#include <iostream>
#include "myclass.h"

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 = create();
  myClass->DoSomething();
  destroy(myClass);
}
Nach dem Login kopieren

Zusammenstellung und Ausführung

Auf Mac OS Kompilieren Sie die ausführbare Benutzerdatei: g class_user.cc -o class_user

  • Unter Linux:

Kompilieren Sie das DSL: g -fPIC -shared myclass.cc -o myclass.soKompilieren Sie die ausführbare Benutzerdatei: g class_user.cc -ldl -o class_user

  • Führen Sie class_user aus, um die gemeinsam genutzte MyClass-Bibliothek zu verwenden. Das MyClass-Objekt wird erfolgreich instanziiert und verwendet.

Das obige ist der detaillierte Inhalt vonWie kann ich Dynamic Shared Libraries (DSLs) in C unter Linux erstellen und verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage