Heim >Backend-Entwicklung >C++ >Wie kann ich dynamische gemeinsam genutzte C-Klassenbibliotheken unter Linux erstellen und verwenden?

Wie kann ich dynamische gemeinsam genutzte C-Klassenbibliotheken unter Linux erstellen und verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 05:12:09599Durchsuche

How Can I Create and Use Dynamic Shared C   Class Libraries on Linux?

Dynamische gemeinsam genutzte C-Klassenbibliotheken unter Linux

Einführung
Erstellen und Verwenden gemeinsam genutzter Klassenbibliotheken in C auf Linux kann eine herausfordernde Aufgabe sein. Dieser Artikel bietet eine umfassende Anleitung, die den Prozess der Erstellung und Verwendung gemeinsam genutzter C-Klassenbibliotheken abdeckt, einschließlich der Erstellung, Änderung und Zerstörung von Objekten.

Erstellen einer gemeinsam genutzten C-Klassenbibliothek
An Führen Sie zum Erstellen einer gemeinsam genutzten C-Klassenbibliothek die folgenden Schritte aus:

  1. Definieren Sie die Klassenschnittstelle:Erstellen Sie eine Header-Datei (.h), die die Klassenschnittstelle einschließlich Mitgliedsvariablen und -methoden deklariert.
  2. Implementieren Sie die Klassenmethoden: Erstellen Sie eine Quelldatei (.cc), die die Klassenmethoden implementiert.
  3. Bibliotheksfunktionen exportieren: Verwenden Sie „extern 'C'“, um die Funktionen zu exportieren, die zum Erstellen und Zerstören der Bibliothek verwendet werden Objekte.
  4. Kompilieren Sie die Bibliothek:Kompilieren Sie die Header- und Quelldateien in eine gemeinsam genutzte Bibliothek mit den entsprechenden Flags (-shared unter Linux, -dynamiclib unter macOS).

Verwenden einer gemeinsam genutzten C-Klassenbibliothek
Um eine erstellte gemeinsam genutzte C-Klassenbibliothek zu verwenden, befolgen Sie diese Schritte:

  1. Laden Sie die Bibliothek:Verwenden Sie dlopen(), um die gemeinsam genutzte Bibliothek in den Speicher zu laden.
  2. Funktionssymbole auflösen:Verwenden dlsym(), um die Adressen der exportierten Funktionen aufzulösen.
  3. Bibliothek erstellen und verwenden Objekte:Verwenden Sie den von dlsym() abgerufenen Funktionszeiger, um Objekte der Bibliotheksklasse zu erstellen und ihre Methoden aufzurufen.
  4. Bibliotheksobjekte zerstören:Wenn Sie fertig sind, verwenden Sie den Zerstörungsfunktionszeiger um die Bibliotheksobjekte ordnungsgemäß zu zerstören.

Beispielimplementierung
Der folgende Code Snippets demonstrieren eine einfache gemeinsam genutzte C-Bibliothek (myclass.h, myclass.cc) und ein C-Programm (class_user.cc), das die verwendet Bibliothek:

myclass.h:

class MyClass {
public:
  MyClass();
  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; }
MyClass::MyClass() { x = 20; }
void MyClass::DoSomething() { cout << x << endl; }

class_user .cc:

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);

Zusammenstellung (Linux):

g++ -fPIC -shared myclass.cc -o myclass.so
g++ class_user.cc -ldl -o class_user

Indem Sie diese Schritte befolgen, können Sie erfolgreich dynamische gemeinsam genutzte C-Klassenbibliotheken unter Linux erstellen und verwenden.

Das obige ist der detaillierte Inhalt vonWie kann ich dynamische gemeinsam genutzte C-Klassenbibliotheken unter Linux erstellen und verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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