共有ライブラリを作成するときは、通常、リンカスクリプトまたは-fvisibility
オプションを使用して、動的リンク時間を短縮するためにすべての内部シンボルを非表示にすることをお勧めします。静的ライブラリを共有ライブラリにリンクするときにシンボルを非表示にする必要がありますか?
- 内部の静的ライブラリ
- サードパーティの静的ライブラリ(例えば、libuv)
は、すべての:私の場合は
は、共有ライブラリが他のライブラリの2種類とリンクされていますそれらは-Wl,--whole-archive
オプションを使用して共有ライブラリーにリンクされるため、結果として得られる共有ライブラリーは自立し、stdlibにのみリンクします。
内部静的ライブラリのすべてのシンボルは、パブリックAPIの一部ではないため、非表示になっています。
サードパーティの静的ライブラリからシンボルを隠す賛否両論は何ですか?ベストプラクティスと既知の落とし穴がありますか?一方で、それらは私の図書館の公開APIの一部ではありません。一方、それらは第三者図書館の公開APIの一部です。
同じサードパーティ製ライブラリの別のバージョンにリンクするときに問題が発生すると思います。理論的には記号を隠すことで解決できるかもしれませんが、実際には予期しない問題が発生する可能性があります。