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

如何在 Linux 上建立和使用動態共用 C 類別庫?

Susan Sarandon
Susan Sarandon原創
2024-12-05 05:12:09599瀏覽

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

Linux 上的動態共享C 類別庫

簡介
在C 上建立和使用共享類別庫Linux 可能是一項具有挑戰性的任務。本文提供了一個全面的指南,涵蓋了建立和使用共享 C 類別庫的過程,包括物件建立、修改和銷毀。

建立共用C 類別庫
到建立共用C 類別庫,請依照下列步驟操作:

  1. 定義類別介面:建立一個宣告類別介面的頭檔(.h),包括成員變數和方法。
  2. 實作類別方法: 建立一個實作類別方法的原始檔案 (.cc)。
  3. 匯出函式庫函數:使用「extern 'C'」匯出將用於建立和銷毀函式庫的函式
  4. 編譯函式庫:使用適當的標誌將頭檔和原始檔編譯到共享庫中(Linux 上為-shared,macOS 上為-dynamiclib)。

使用共享C 類別庫
使用已共享的C 類別庫建立完成後,請按照以下步驟操作:

  1. 載入庫:使用dlopen() 將共享庫載入到記憶體中。
  2. 解析函數符號: 使用dlsym() 解析導出的位址
  3. 建立和使用庫物件:使用從dlsym() 檢索到的函數指標來建立庫類別的物件並呼叫它們的方法。
  4. 銷毀庫物件:完成後,使用銷毀函數指標正確銷毀庫

範例實作
以下程式碼片段示範了一個簡單的共用C 函式庫(myclass.h、myclass.cc)和一個 C程式(class_user.cc)它利用了函式庫:

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

編譯(Linux):

g++ -fPIC -shared myclass.cc -o myclass.so
g++ class_user.cc -ldl -o class_user
請依照下列步驟,您可以在Linux 上成功建立和使用動態共用 C類別庫。

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

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