2016-10-16 10 views
-2
  • ほとんどのコンポーネントはそれは、ヘッダファイルのみで提供され、ソース コード形式でエクスポートされています。
  • Cライブラリのほとんどの機能がlibc.so.によって提供されます

だから、私の質問は以下の通りです。なぜlibstdC++が必要なのですか? C++標準ライブラリの

は、なぜ我々はそう++のlibstdc必要がありますか? libstdC++の中ではどのような内容

。そう?

+4

自分自身で確認してください。https://github.com/gcc-mirror/gcc/tree/master/libstdc%2B%2B-v3/src – Brian

+1

最初の文は完全に間違っています。あなたの質問は、間違った前奏に基づいています。たとえそれが真実であっても、「ソース形式でエクスポートされていない」シンボルが1つしかないという事実は十分な説明であるため、あなたの質問もまた別のものに依存します* – EJP

答えて

3

ライブラリで定義されているシンボルがたくさんあります。特に、言語サポートの多くと標準ライブラリ例外クラスはすべてライブラリに定義されています。標準C++ライブラリのコンポーネントの多くはテンプレートですと、このように、インライン定義を持って、彼らは明示的にインスタンス化されることから利益を得ない場合でも

。 IOStreamsライブラリの明示的なインスタンス化(およびexternテンプレートとしての宣言)を使用すると、コンパイル時間が大幅に改善されます。

シンボルがライブラリ使用nmで定義されているかを把握するには:それは、ライブラリで定義され、参照シンボルを出力します。名前は、適切なc++filtに結果を配管することによって修正されます。

+0

externテンプレートは、それが何を意味するのか分かりますか? –

+1

@ShacharShemesh:*エクスポートされた*テンプレートは*削除されました*(主に彼らが提供することを意図したものではなく、ほとんどの実装者がそれらを実装したくないためです)。 'extern'テンプレートは、宣言されたインスタンス化に対して暗黙的なインスタンス化が行われないことを単に宣言します。代わりに、適切な明示的なインスタンス化が提供されます。 –

関連する問題