7

通常、サードパーティ(非標準)C ++ライブラリのコード(ヘッダーを含む)を使用する場合、ビルド済みのバイナリファイルは、アプリケーションを表すターゲット実行可能ファイルにリンクされます(または含まれます)が、C ++標準ライブラリはどうなりますか? 、私が見た限りでは、C ++標準ライブラリからのコードのみを使用するアプリケーションとともにライブラリを出荷する必要はありません。したがって、コードは静的にリンクされ、実行可能ファイルに含まれていますか?

4

5 に答える 5

12

いいえ、標準ライブラリはデフォルトで実行時に動的にリンクされます。

ダイナミックローダーを実行すると、ダイナミックライブラリがロードされて実行されることがわかった場合は、いくつかの標準的な場所でダイナミックライブラリが検索されます。それ以外の場合は、アプリケーションが終了します。

Unixシステムの場合:
/ usr / lib:検索:libstdc ++ *

Windowsの場合:
c:\ windows \ system32検索:MSVCRT.DLL

検索パスに影響を与える可能性のある環境変数もいくつかあります。dlopenのプラットフォームのマニュアルページを見て、それらが何であるかを確認してください。必要なものはすべて、プラットフォームのdlopenのマニュアルページにあるはずです。

ほとんどのシステムでは、これらのライブラリが適切な場所にあり、自動的に検出されます。
STLの残りの部分では、追加の共有lib依存関係は導入されません。

于 2009-08-22T19:08:18.677 に答える
7

最近のMinGWgcc/ g ++バージョン(4.40)では、フラグ-shared-libstdc ++を使用して、デフォルトの静的ライブラリではなく共有dllに対してリンクできます。

ライブラリの静的バージョンは/mingw/ lib / gcc / mingw32/[gccバージョン]にあります。ファイル名はlibstdc++。aです。これは、MinGWを使用してc++アプリをコンパイルするときにデフォルトでリンクされます。

于 2009-08-22T21:59:20.393 に答える
3

MinGW C ++プログラムの唯一の基本的な実行時依存関係は、MSVCRT.DLLにあります。他の依存関係は、プログラムが実際に何をするかによって異なります。たとえば、ODBCデータベース接続を使用する場合は、ODBC32.DLL(およびおそらく他のいくつかのWindows DLL)に依存します。ただし、MinGWC++プログラムでstd::stringやstd::vectorなどのクラスを使用しても、新しいダイナミックライブラリの依存関係は導入されません。

ダイナミックライブラリの依存関係が心配な場合は、http: //www.dependencywalker.com/のツール「DependencyWalker」を確認してください。

于 2009-08-22T19:20:01.417 に答える
2

テンプレートが非常に多いため、ほとんどはヘッダーファイルに含まれています。必要なものはほとんどありませんlibstdc++.so(おそらくiostreamそうかもしれませんが)。

于 2009-08-22T19:07:25.573 に答える
1

CおよびC++ランタイムライブラリは、通常のライブラリと同じ方法でリンクされます。主な違いは、通常、コンパイラとリンカによって自動的にコンパイルおよびリンクされ、指定する必要がないことです。

ただし、アプリに同梱する必要がないことを一般化するのは誤りです。動的にリンクされたバイナリを出荷するほとんどの場合、それらを含める必要があります。たとえば、MSVC ++でコンパイルする場合は、ビルドマシンにインストールされているものとリンクします。動的にリンクされたバイナリを新しいWindowsインストールにインストールする場合は、ライブラリがインストールパックの一部として含まれていることを確認しない限り、問題が発生する可能性があります(Visual Studioの再配布可能ファイルに関するドキュメントを参照してください)。Solarisマシンでも同じことが言えます(標準ライブラリはパッチセットの一部としてアップグレードされます)。Linuxでは、より複雑で、GPLのために静的にリンクすることはできませんが、ライブラリは通常、distroパッケージを介してインストールされます。

于 2009-09-30T23:39:55.767 に答える