xcodeでdylibを作成しようとしています。Xcode で c/c++ ライブラリ テンプレートを選択することで、dylb を作成できます。
このdylibに「init」メソッドを追加したい。dylib に "init" メソッドを追加する方法がわかりません。
私の考えは、dlopen() の助けを借りて、実行時にこれを「init」と呼ぶことです。
貴重なご意見ありがとうございます。
C++ でコーディングする場合、dlopen
-ed ライブラリに静的オブジェクトを含めることができます。それらのコンストラクターはその時点で呼び出されdlopen
ます (そしてそのデストラクタはその時点で実行されdlclose
ます)。
gcc
コードが(C、C++、または他の言語で)コンパイルされている場合は、関数属性constructor
とdestructor
関数属性を使用できます。
(廃止されたシンボル_init
を使用することもできます_fini
が、これはdlopen
(少なくとも Linux では、おそらく MacOSX では) 廃止された機能です。その場合、それらextern "C" void _init(void);
を C++ で宣言する必要があります。)
マングルされていない名前dlsym
を扱うことを忘れないでください。そのため、C++ の名前を宣言する必要があります。extern "C"
また、動的にロードされるものに必要な独自の規則を設定することもできます。たとえば、名前付きの関数とmy_initialization
、それを実行するコードdlopen
が後でdlsym
それを見つけるために使用します。どのシンボルがdlsym
-ed で、どのように使用されるかについての規則を文書化する必要があります。
MacOSXはよくわかりませんが、このドキュメントをグーグルで検索しました