2012-01-23 28 views
0

実行時に読み込まれる共有オブジェクト(*.so)をプラグインとして使用するアプリケーションがあります。私も静的ライブラリ(*.a)をいくつかの静的関数が含まれています。両方のPluginAとPluginBライブラリにリンクすると、彼らは同様に静的関数の独自のコピーを取得しますか?共有オブジェクト内の静的ライブラリの静的関数

+2

はい、静的ライブラリから使用するものはすべてコードに直接リンクされます。それはあなたの質問ですか? –

+0

他の可能性はありますか? –

答えて

0

はい、どちらのプラグインも静的な.aライブラリに含まれる関数/シンボルの独自のコピーを取得します。共有ライブラリーまたはプラグインで使用するには、.aライブラリーは位置独立コードでなければなりません。これはコンパイルおよびリンク時に-fPICオプションを使用して達成できます。

また、PluginAとPluginBに含まれる静的ライブラリの2つのコピーの間にネームフラッシュが存在する可能性があるので、PluginAとPluginBがオプションRTLD_GLOBALでdlopened()されていないことを確認する必要があります。コンパイル時にPluginAとPluginBを動的にリンクさせる場合、このネームキャッシュの問題は共有ライブラリでさらに顕著になります。

関連する問題