動的共有ライブラリ (DSL) は、C でのコードの再利用とモジュール化のための強力なメカニズムを提供します。これにより、複数のプログラムがライブラリ コードの 1 つのコピーを共有できるようになり、メモリ使用量が削減され、パフォーマンスが向上します。
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 OS の場合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
Mac OS X:
g++ class_user.cc -o class_user
提供されたサンプルは、共有クラス ライブラリを作成し、それを別の実行可能ファイルにロードして、クラスの機能を利用します。主な概念には、クラスと関数の定義、オブジェクトの作成と破棄のためのラッパー関数の作成、ライブラリのロード、クラス メソッドの呼び出しが含まれます。
以上がLinux 上の C で動的共有ライブラリ (DSL) を作成して使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。