mac / gccのファイルシステムからではなく、メモリからライブラリをロードすることは可能ですか?
WindowsではMemoryModuleを使用していますが、明らかにクロスプラットフォーム互換ではありません。
まず最初に、これを行うには、OSXABIダイナミックローダーリファレンスを読むことをお勧めします。
これを行うには、NSCreateObjectFileImageFromMemoryAPIを使用する必要があります。
メモリ内のMach-Oファイルへのポインタを指定すると、この関数は
NSObjectFileImage
参照を作成して返します。-bundle
現在の実装はバンドルでのみ機能するため、リンカーオプションを使用してMach-O実行可能ファイルをビルドする必要があります。
address
を指すメモリブロックは、vm_allocate
(/usr/include/mach/vm_map.h
)で割り当てる必要があります。
vm_allocate
モジュールを含むメモリブロックに使用される要件を必ず順守してください。
オブジェクトファイルイメージを取得したら、NSLinkModule関数を使用してモジュールをプログラムにリンクする必要があります。
この関数を呼び出すと、指定されたモジュールによって参照されるすべてのライブラリがライブラリ検索リストに追加されます。を渡さない限り、モジュール内のすべてのグローバルシンボルをグローバルシンボルリストに追加します
NSLINKMODULE_OPTION_PRIVATE
。NSLinkModule
リンクした後、 NSDestroyObjectFileImage関数を呼び出してクリーンアップすることを忘れないでください。
この関数が呼び出されると、動的ローダーはパラメーターが指すメモリーに対して
vm_deallocate
( )を呼び出します。/usr/include/mach/vm_map.h
objectFileImage
これらの関数は非推奨ですが、提案された代替案を使用した代替手段は(私の知る限りでは)ないことに注意してくださいdlopen
。al。