私のソフトウェア プロジェクト A が共有ライブラリ (libA.so) として出荷されているとします。A は、libA.so をビルドするときに共有ライブラリとしてリンクするサードパーティ ライブラリ B を使用します。(解決策の一部である場合は、libB.so ではなく libB.a を使用しても問題ありません。) B は A によって使用されますが、厳密に言えば、A にリンクするアプリは、 B のシンボルであり、A のパブリック API の一部ではありません。
OK、ここに問題があります。一部のアプリは、独自の理由で B に対しても A に対してもリンクしており、B のバージョン (アプリが使用するバージョンとビルド時にリンクされた A のバージョン) が一致しない場合、シンボルが衝突するとランダムにクラッシュします。
B のすべてのシンボルを A のニーズに合わせて解決し、libA.so で可視シンボルとしてエクスポートしないようにするにはどうすればよいですか? つまり、A に対してリンクするアプリが B のシンボルに対して直接解決されることは望ましくありません。それは可能ですか?
主に、Linux での解決策が必要ですが、OSX や Windows で問題を解決する方法を知っていると、将来的にも役立ちます。
A 自体のシンボルの可視性を制限する方法 (A のパブリック API の一部である必要はない) を理解していますが、依存ライブラリ B に対してこれを行うにはどうすればよいですか?