シンボルをdlsym
に公開し、静的リンクと動的リンクの間に非表示にする方法はありますか?静的リンクと動的リンクの間にシンボルを隠す、動的ロードのためにdlsymに公開する
私がしたいのは、共有ライブラリまたはプラグインとして変更なしで使用できるオブジェクトファイルを許可することです。オブジェクトファイルがライブラリとして使用可能になる場合、シンボルの衝突を避けなければなりません。残念ながら、これは、プラグインとして使用された場合、プラグインを初期化するために使用する関数の名前は、各プラグインごとに異なる必要があることを意味します。 CPythonは、シンボル名dlsym
を共有オブジェクトのファイル名に関連付けることによってこれを解決します。これは問題ありませんが、共有オブジェクトの名前が変更された場合は破損します。
プラグインで共通の初期化関数名をdlsym
に公開することをお勧めしますが、共有オブジェクトが動的にリンクされている場合、この名前は無視されます。 (この場合、初期化は別の方法で行われます)
編集:私は質問の前提について間違いました。同じシンボルをエクスポートするダイナミックライブラリAとBでは、プログラムが両方のライブラリにリンクすると、リンカエラーは発生しません。
私はそれが可能だとは思わない、唯一の解決策は2つのライブラリを作成することです。 http://stackoverflow.com/questions/2222162/how-to-apply-gcc-fvisibility-option-to-symbols-in-static-libraries – Stargateur
最も簡単な解決策は、あなたのライブラリに対して*リンクしないことです。 – tofro
@tofro Huh?問題は文字通り、これらのライブラリをどのようにリンクさせることができるかを尋ねています。 – Praxeolitic