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:
Beispiel Code
myclass.h
#include <iostream> class MyClass { public: MyClass(); virtual void DoSomething(); private: int x; };
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; }
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); }
Zusammenstellung und Ausführung
Auf Mac OS Kompilieren Sie die ausführbare Benutzerdatei: g class_user.cc -o class_user
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
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!