2009-04-24 3 views
11

ライブスワップをサポートする必要がある共有オブジェクト/ダイナミックライブラリを持つC/C++(= 2?)プラグインベースのフレームワークを開発する場合、実装の詳細を調べるのに役立つ例はありますか?C/C++プラグインベースのシステムに適したパターンですか?

ありがとうございました。

注:ライブスワップここで重要なポイントであるあなたがPOSIX、dlopen()dlsym()にあり、dlclose()はあなたが必要とするすべての場合は、システムを再起動する必要は要件

+0

あなたは、オペレーティングシステムを詳述できますか? –

+0

開始点としてhttp://stackoverflow.com/questions/384121/creating-a-module-system-dynamic-loading-in-cを参照してください。 – unwind

+0

Windows /その他のOSの場合は? – RobS

答えて

9

ではありません。

詳細および例については、man dlsymを参照してください。

動的ライブラリのロードについては、articleがあり、プラグインインフラストラクチャの例があります。

EDIT OPにはWindowsが追加されているため、このアプローチはWindowsがPOSIXに準拠していないため役に立ちません。しかし、WinAPIにも同様の機能があります - hereを参照してください。

+0

可能ですACEのようなプラットフォームに依存しないライブラリを使用することをお勧めしますhttp://www.dre.vanderbilt.edu/Doxygen/Current/html/ace/a00110.html – lothar

5

Boost.Extensionを試してみたいですが、その名前にもかかわらず、それはブーストライブラリの1つではありません。

ここにはlink to its documentationがあります。

+0

非常にniceits not boostまだ)ですが、それはサンドボックスにあります –

2

C++プラグインでは、以前に言及したposix呼び出しでどのように達成するかを詳しく調べるthis articleをチェックすることができます。我々はC++ライブラリのクラスにアクセスするには、それらを使用しない方法を、Cライブラリ内の機能にアクセスするために、これらの機能を使用できることを考えると

:記事を引用

?克服すべきいくつかの問題がある。ひとつは、私たちが必要とする記号を図書館で見つけることができなければならないということです。これは、シンボルがCとC++ファイルに格納される方法の違いのために思われるかもしれません。

4

各プラットフォームのAPIごとに個別に開発することなく、クロスプラットフォームのライブラリを読み込む場合は、libltdlが役立ちます。

と呼ばれる小さなライブラリを提供します。このライブラリは、プログラマからのライブラリのさまざまな難点を隠すことを目指しています。これは、いくつかのヘッダーとdlopening機能を必要とするアプリケーションと共に配布できる小さなCソースファイルで構成されています。 libltdlサービスを簡単に実装するためにダイナミックリンカがあまりにも制限されているプラ​​ットフォームでは、GNU DLDが必要です。あるいは、libtoolのdlpreopeningメカニズムとの動的リンクのみをエミュレートします。

  • dlopen(Solaris版、Linux、および様々なBSD風味)
  • shl_load(HP-UX)
  • LoadLibrary(Win16のとWin32)
  • libltdlが現在、以下の動的リンク機構をサポートしていますload_add_on(BeOS)

  • NSAddImageまたはNSLinkModule(ダーウィンおよびMac OS X)
  • GNU DLDが
  • libtoolのdlpreopen(静的ライブラリの動的リンクをエミュレート)

Boost.Extensionは、Windows PE dll S、UNIX ELF共有オブジェクト、およびMacをサポートするように思われる(Dlpreopeningを見ます) OS X Mach-Oバンドル。まあ、それはあなたのために十分かもしれません...

関連する問題