Erstellen und Verwenden dynamischer gemeinsam genutzter C-Klassenbibliotheken unter Linux
Erstellen einer gemeinsam genutzten Klassenbibliothek
Um eine gemeinsam genutzte C-Klassenbibliothek zu erstellen, können Sie folgen Diese Schritte:
- Definieren Sie die Header-Datei .h und deklarieren Sie die Klasse und ihre Mitgliedsfunktionen. Denken Sie daran, virtuelle Memberfunktionen zu verwenden, um dynamische Verknüpfungen zu ermöglichen.
- Implementieren Sie die Klasse in einer separaten Quelldatei, .cc, einschließlich der Header-Datei.
- Definieren Sie externe C-Funktionen für die Objekterstellung (create_object) und Zerstörung (destroy_object).
- Verwenden Sie #include, um die Header-Datei einzubinden und den Namespace std; um den Standard-Namespace zu verwenden.
- Kompilieren Sie die Bibliothek mit g -fPIC -shared unter Linux oder g -dynamiclib -flat_namespace unter Mac OS X und generieren Sie eine gemeinsame Objektdatei (.so).
Verwenden von gemeinsam genutzten Klassenbibliotheken
Um gemeinsam genutzte Klassenbibliotheken separat zu verwenden ausführbare Datei:
- Fügen Sie die erforderlichen Header-Dateien ein.
- Laden Sie die gemeinsam genutzte Bibliothek mit dlopen.
- Verwenden Sie dlsym, um Funktionszeiger für create_object und destroy_object abzurufen.
- Erstellen Sie eine Instanz der Klasse mit create_object.
- Member-Funktionen für die Instanz aufrufen.
- Zerstören Sie die Instanz mit destroy_object.
- Schließen Sie die gemeinsam genutzte Bibliothek mit dlclose.
Zusätzlich Tipps für Plugin-Systeme
Leiten Sie für ein Plugin-System Ihre Klassen von einer Basisklasse ab und machen Sie alles erforderlich Funktionen virtuell. Plugin-Autoren können die Virtuals überschreiben und die Funktionen create_object und destroy_object implementieren. Auf diese Weise bleibt Ihre Hauptanwendung unverändert.
Das obige ist der detaillierte Inhalt vonWie erstelle und verwende ich dynamische gemeinsam genutzte C-Klassenbibliotheken unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!