2

ロード可能なプラグインをバンドルとして作成し、ホスト実行可能ファイルでシンボルを使用することは、Mac に非常に適しています。Linux と Windows でこれを行うにはどうすればよいですか?

-rdynamic便利なLinuxがあると聞きましたが、Windowsに関しては完全に途方に暮れています。

ポイントは、共有ライブラリに対してホストとプラグインの両方をリンクすることから離れて、静的に構築されたホストに移行することです。

4

5 に答える 5

1

私がよく目にするプラグイン モデルは、プラグインで初期化関数を呼び出し、ホスト実行可能ファイルに関数ポインターを含む構造体またはクラスを渡します。

于 2009-12-04T00:33:38.417 に答える
1

このリンクはおそらくここでも解決策です: dlopen() .so fails to find symbols in a stripped executable

主なアイデアは、実行可能ファイルにリンカー オプション -E (--export-dynamic) を使用することです (または、--dynamic-list を使用して、DSO がアクセスできるシンボルに明示的に名前を付けます)。

于 2013-09-25T10:41:16.140 に答える
0

どうやらこれを達成する方法ありますが、ホスト実行可能ファイルへのハードコードされた依存関係に依存しています。

于 2009-12-07T11:44:53.947 に答える
0

Windows では、わずかに異なるモデルを使用することをお勧めします。クロス プラットフォーム フレームワークを使用している場合は、これを IFDEF できるはずです。

LoadLibrary 関数を使用すると、DLL の名前を文字列として渡すことができます。次に、ライブラリ内のさまざまな関数のアドレスを名前で取得し、それらを関数ポインターでポイントできます。

于 2009-12-04T00:28:03.717 に答える
0

私が理解していることを確認するために、ホスト アプリケーションでのみ定義されているシンボルを自動的に解決するプラグイン DLL を動的にロードおよびアンロードできるようにしたいと考えていますよね? これは Windows では不可能だと思います (Linux については知りません)。1 つのオプションは、ホスト関数を、全員がリンクする共有静的ライブラリに移動することですが、ホスト固有の機能を提供する必要があるため、これはおそらく不可能です。実行可能な唯一のオプションは、ザンのアプローチだと思います。

于 2009-12-06T16:29:06.187 に答える