ライブスワップをサポートする必要がある共有オブジェクト/ダイナミックライブラリを持つC/C++(= 2?)プラグインベースのフレームワークを開発する場合、実装の詳細を調べるのに役立つ例はありますか?C/C++プラグインベースのシステムに適したパターンですか?
ありがとうございました。
注:ライブスワップここで重要なポイントであるあなたがPOSIX、dlopen()
、dlsym()
にあり、dlclose()
はあなたが必要とするすべての場合は、システムを再起動する必要は要件
ライブスワップをサポートする必要がある共有オブジェクト/ダイナミックライブラリを持つC/C++(= 2?)プラグインベースのフレームワークを開発する場合、実装の詳細を調べるのに役立つ例はありますか?C/C++プラグインベースのシステムに適したパターンですか?
ありがとうございました。
注:ライブスワップここで重要なポイントであるあなたがPOSIX、dlopen()
、dlsym()
にあり、dlclose()
はあなたが必要とするすべての場合は、システムを再起動する必要は要件
ではありません。
詳細および例については、man dlsym
を参照してください。
動的ライブラリのロードについては、articleがあり、プラグインインフラストラクチャの例があります。
EDIT OPにはWindowsが追加されているため、このアプローチはWindowsがPOSIXに準拠していないため役に立ちません。しかし、WinAPIにも同様の機能があります - hereを参照してください。
可能ですACEのようなプラットフォームに依存しないライブラリを使用することをお勧めしますhttp://www.dre.vanderbilt.edu/Doxygen/Current/html/ace/a00110.html – lothar
Boost.Extensionを試してみたいですが、その名前にもかかわらず、それはブーストライブラリの1つではありません。
ここにはlink to its documentationがあります。
非常にniceits not boostまだ)ですが、それはサンドボックスにあります –
C++プラグインでは、以前に言及したposix呼び出しでどのように達成するかを詳しく調べるthis articleをチェックすることができます。我々はC++ライブラリのクラスにアクセスするには、それらを使用しない方法を、Cライブラリ内の機能にアクセスするために、これらの機能を使用できることを考えると
:記事を引用
?克服すべきいくつかの問題がある。ひとつは、私たちが必要とする記号を図書館で見つけることができなければならないということです。これは、シンボルがCとC++ファイルに格納される方法の違いのために思われるかもしれません。
Boost.Extension(これは決して使用されませんが、すぐに試してみます)。もう1つの選択肢はPOCO SharedLibrary classです。
各プラットフォームの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バンドル。まあ、それはあなたのために十分かもしれません...
あなたは、オペレーティングシステムを詳述できますか? –
開始点としてhttp://stackoverflow.com/questions/384121/creating-a-module-system-dynamic-loading-in-cを参照してください。 – unwind
Windows /その他のOSの場合は? – RobS