首頁 >後端開發 >C++ >如何在 Linux 上用 C 建立和使用動態共享庫 (DSL)?

如何在 Linux 上用 C 建立和使用動態共享庫 (DSL)?

Patricia Arquette
Patricia Arquette原創
2024-12-04 00:25:12932瀏覽

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

在 Linux 上用 C 建立和使用動態共享庫

動態共享庫 (DSL) 為 C 中的程式碼重用和模組化提供了強大的機制。它們允許多個程式共享庫程式碼的單一副本,從而減少記憶體使用並提高效能。

建立動態共享庫

要建立 DSL,您需要定義類別和函數分別位於頭文件和實作文件中。在頭文件中,使用虛擬函數聲明您的類別以防止靜態連結。在實作文件中,定義函數並提供用於建立和銷毀物件的包裝函數。

// myclass.h
class MyClass {
public:
  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; }

編譯與連結

在 Linux 上:

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

在 Mac作業系統上X:

g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so

使用共用程式庫

在單獨的執行檔中,使用dlopen() 載入DSL 並擷取指向create_object() 和destroy_object()函數的指標。使用create_object()建立一個類別實例,使用類別方法,最後呼叫destroy_object()來釋放記憶體。

// class_user.cc
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 = (MyClass*)create();
  myClass->DoSomething();
  destroy(myClass);
}

編譯與連結:

開啟Linux:

g++ class_user.cc -ldl -o class_user

在 OS上:

g++ class_user.cc -o class_user

範例程式碼

提供的範例展示如何建立共用類別庫,將其載入到單獨的執行檔中,並利用類別功能。主要概念涉及定義類別和函數、建立用於物件建立和銷毀的包裝函數、載入庫以及呼叫類別方法。

以上是如何在 Linux 上用 C 建立和使用動態共享庫 (DSL)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn