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

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

Mary-Kate Olsen
リリース: 2024-12-05 20:24:12
オリジナル
463 人が閲覧しました

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

Linux 上の C での動的共有ライブラリの作成と使用

動的共有ライブラリ (DSL) を使用すると、複数のプログラムがコードを共有できるため、メモリ使用量が削減されます。そして効率の向上。 C では、DSL を使用して、複数の実行可能ファイルにアクセスできる再利用可能なクラス ライブラリを作成できます。

DSL の作成

DSL を作成するには、ヘッダーでクラス インターフェイスと実装を定義します。およびソース ファイル (例: myclass.h および myclass.cc)。シンボルの読み込みを容易にするために、クラスに仮想デストラクターと extern "C" とマークされたパブリック メソッドが含まれていることを確認して、シンボルの読み込みを容易にします。

DSL の使用

別の実行可能ファイルで DSL を利用するには、次の手順を実行します:

  1. 必要なライブラリを含める() とヘッダー。
  2. dlopen() を使用して共有ライブラリをロードします。
  3. dlsym() を使用してライブラリの関数とシンボルにアクセスします。
  4. create_object() 関数を呼び出して、ライブラリ クラスからオブジェクトをインスタンス化します。
  5. Callオブジェクトのメソッド。
  6. destroy_object() を使用してオブジェクトを破棄します。

例コード

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);
}
ログイン後にコピー

コンパイル実行

Mac OS X:

  • DSL をコンパイルします: g -dynamiclib - flat_namespace myclass.cc -o myclass.so
  • ユーザー実行可能ファイルをコンパイルします: g class_user.cc -o class_user

Linux の場合:

  • DSL をコンパイルします: g -fPIC -shared myclass.cc -o myclass.so
  • ユーザー実行可能ファイルをコンパイルします: g class_user.cc -ldl -o class_user

MyClass 共有ライブラリを使用するには、class_user を実行します。これにより、MyClass オブジェクトが正常にインスタンス化され、利用されます。

以上がLinux 上の C で動的共有ライブラリ (DSL) を作成して使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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