0
実行時に読み込まれる共有オブジェクト(*.so
)をプラグインとして使用するアプリケーションがあります。私も静的ライブラリ(*.a
)をいくつかの静的関数が含まれています。両方のPluginAとPluginBライブラリにリンクすると、彼らは同様に静的関数の独自のコピーを取得しますか?共有オブジェクト内の静的ライブラリの静的関数
実行時に読み込まれる共有オブジェクト(*.so
)をプラグインとして使用するアプリケーションがあります。私も静的ライブラリ(*.a
)をいくつかの静的関数が含まれています。両方のPluginAとPluginBライブラリにリンクすると、彼らは同様に静的関数の独自のコピーを取得しますか?共有オブジェクト内の静的ライブラリの静的関数
はい、どちらのプラグインも静的な.aライブラリに含まれる関数/シンボルの独自のコピーを取得します。共有ライブラリーまたはプラグインで使用するには、.aライブラリーは位置独立コードでなければなりません。これはコンパイルおよびリンク時に-fPICオプションを使用して達成できます。
また、PluginAとPluginBに含まれる静的ライブラリの2つのコピーの間にネームフラッシュが存在する可能性があるので、PluginAとPluginBがオプションRTLD_GLOBALでdlopened()されていないことを確認する必要があります。コンパイル時にPluginAとPluginBを動的にリンクさせる場合、このネームキャッシュの問題は共有ライブラリでさらに顕著になります。
はい、静的ライブラリから使用するものはすべてコードに直接リンクされます。それはあなたの質問ですか? –
他の可能性はありますか? –