在Linux 上用C 建立和使用動態共享庫
動態共享庫(DSL) 允許多個程式共享程式碼,減少記憶體使用並提高效率。在 C 中,DSL 允許建立可供多個可執行檔案存取的可重複使用類別庫。
建立 DSL
要建立 DSL,請在標頭中定義類別介面和實作和來源檔案(例如 myclass.h 和 myclass.cc)。確保該類別包含虛擬析構函數和標記為 extern“C”的公共方法,以方便符號載入。
使用DSL
要在單獨的可執行文件中使用DSL,執行以下步驟:
範例程式碼
myclass.h
#include <iostream> class MyClass { public: MyClass(); virtual void DoSomething(); private: int x; };
myclass. >
#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); }
編譯並執行
在 Macto>
編譯使用者執行檔:g class_user.cc -o class_user
編譯用戶執行檔:g class_user.cc -ldl -oo class_user
執行class_user以使用MyClass共享庫。它將成功實例化並利用 MyClass 物件。以上是如何在 Linux 上用 C 建立和使用動態共享庫 (DSL)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!