はい、できますが、最初のプロセスはmmap
、メモリ マップト ファイルまたは で作成された共有領域のいずれかを介して、最初に共有メモリを作成している必要がありますshm_open
。
コンパイルされたコードを共有している場合、共有ライブラリはそのために作成されました。それらに対して通常の方法でリンクすることができ、共有は自動的に行われます。またはdlopen
、プラグインなどを使用して手動でロードすることもできます。
アップデート:
コードはコンパイラによって生成されているため、再配置について心配する必要があります。コンパイラは、どこでも動作するコードを生成しません。.data
セクションが特定の場所にあり、.bss
セクションがゼロになっていることが期待されます。GOT を実装する必要があります。静的コンストラクターを呼び出す必要があります。
要するに、あなたが望むのはおそらくdlopen
. このシステムを使用すると、ファイルのように共有ライブラリを開き、関数ポインタを名前で抽出できます。ライブラリを構成する各プログラムdlopen
はコード セクションを共有するため、メモリを節約できますが、それぞれがデータ セクションの独自のコピーを持つため、互いに干渉することはありません。
ライブラリ コードをコンパイルする必要があることに注意してください。-fPIC
そうしないと、コードを共有できなくなります (実際、多くのアーキテクチャのリンカとダイナミック ローダーは、とにかく PIC ではないライブラリをサポートしていない可能性があります)。