ホームページ > バックエンド開発 > C++ > Linux 上で動的共有 C クラス ライブラリを作成して使用するにはどうすればよいですか?

Linux 上で動的共有 C クラス ライブラリを作成して使用するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-05 05:12:09
オリジナル
603 人が閲覧しました

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) を示しています。を利用するlibrary:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート