0

xcodeでdylibを作成しようとしています。Xcode で c/c++ ライブラリ テンプレートを選択することで、dylb を作成できます。

このdylibに「init」メソッドを追加したい。dylib に "init" メソッドを追加する方法がわかりません。

私の考えは、dlopen() の助けを借りて、実行時にこれを「init」と呼ぶことです。

貴重なご意見ありがとうございます。

4

1 に答える 1

0

C++ でコーディングする場合、dlopen-ed ライブラリに静的オブジェクトを含めることができます。それらのコンストラクターはその時点で呼び出されdlopenます (そしてそのデストラクタはその時点で実行されdlcloseます)。

gccコードが(C、C++、または他の言語で)コンパイルされている場合は、関数属性constructordestructor 関数属性を使用できます。

(廃止されたシンボル_initを使用することもできます_finiが、これはdlopen(少なくとも Linux では、おそらく MacOSX では) 廃止された機能です。その場合、それらextern "C" void _init(void);を C++ で宣言する必要があります。)

マングルされていない名前dlsymを扱うことを忘れないでください。そのため、C++ の名前を宣言する必要があります。extern "C"

また、動的にロードされるものに必要な独自の規則を設定することもできます。たとえば、名前付きの関数とmy_initialization、それを実行するコードdlopenが後でdlsymそれを見つけるために使用します。どのシンボルがdlsym-ed で、どのように使用されるかについての規則を文書化する必要があります。

MacOSXはよくわかりませんが、このドキュメントをグーグルで検索しました

于 2012-07-20T07:26:42.793 に答える