2017-09-23 11 views
1

共有ライブラリを作成するときは、通常、リンカスクリプトまたは-fvisibilityオプションを使用して、動的リンク時間を短縮するためにすべての内部シンボルを非表示にすることをお勧めします。静的ライブラリを共有ライブラリにリンクするときにシンボルを非表示にする必要がありますか?

  • 内部の静的ライブラリ
  • サードパーティの静的ライブラリ(例えば、libuv)

は、すべての:私の場合は

は、共有ライブラリが他のライブラリの2種類とリンクされていますそれらは-Wl,--whole-archiveオプションを使用して共有ライブラリーにリンクされるため、結果として得られる共有ライブラリーは自立し、stdlibにのみリンクします。

内部静的ライブラリのすべてのシンボルは、パブリックAPIの一部ではないため、非表示になっています。

サードパーティの静的ライブラリからシンボルを隠す賛否両論は何ですか?ベストプラクティスと既知の落とし穴がありますか?一方で、それらは私の図書館の公開APIの一部ではありません。一方、それらは第三者図書館の公開APIの一部です。

同じサードパーティ製ライブラリの別のバージョンにリンクするときに問題が発生すると思います。理論的には記号を隠すことで解決できるかもしれませんが、実際には予期しない問題が発生する可能性があります。

答えて

1

あなたの意見では、あなたのAPIの一部ではないすべてのシンボルを非表示にする必要があります。また、サードパーティの静的ライブラリシンボルを非表示のものに変換するには、--exclude-libs,ALLというオプションが必要です。私は解決策の問題を知りません、それは動的リンクをスピードアップ、また、他のライブラリバージョンとのさらなる静的リンクの欠点を見ません..静的なリンクは動的リンク(ホットスワップなど)ではないためです。

関連する問題