これを行うメイン プログラムのグローバルは、dlopen
動的にロードされるコードから見えるようにする必要があります。ただし、これまでに見た最善のアドバイス (特に漠然とした移植性の高いコードを使用する場合) は、関数呼び出しのみをリンカー分割を介して渡し、どちらの方向にも変数をエクスポートしないことです。また、ロードされたコードがその API の興味深い部分をローダーに登録するための API がある場合も最適です (たとえば、「baz で foobar を描画するためにこのSPIを提供する方法は次のとおりです」)。すべてを一緒にマッシュアップするのではなく、コールバック。
[編集]: これを行うもう 1 つの理由は、弱いリンクをサポートしていないプラットフォームでシミュレートしている場合です。.so
これは、起動時に明示的にエクスポートするのではなく、動的ライブラリによってエクスポートされた API から SPI を構築するメイン プログラムであることを除いて、私がリストした他のものとよく似ています。これは実際には 2 番目に良い方法ですが、望むよりも自分が持っているものでやり遂げることになります (まあ、なんらかの接続ライブラリを作成して作業を行う準備ができていない限り)。