2017-10-12 5 views
4

ランタイムライブラリとは何ですか?私はthisを読んだので、その目的についてまともな理解を持っていますが、それはファイルですか?それはあなたが明示的に標準ライブラリのように含めることができるものですか?特にランタイムライブラリは何ですか?

+0

@ user0042入力いただきありがとうございますが、これはランタイムライブラリが実際に何を表示していますか?あなたが読むことができる物理的なファイルのように、等... – Rocket

+0

私が述べたように、私はその用語について読んでいます。私は彼らができることのいくつかの例を愛するだろう。 – Rocket

+0

ランタイムライブラリは、正しく動作するためにユーザプログラム(例えば、あなたが書いたもの)が必要とするコード(関数など)の集まりです。例えば、 'main()'関数が呼び出される前に実行されるC++標準ライブラリとコードは、通常ランタイムライブラリの一部です。ほとんどのC++プログラムは、それがなければ役に立たないものは何もできません。ランタイムライブラリは、独立した実行可能ファイル(例えば、あなたのプログラムが実行することができないWindows DLLウィンドウ)であってもよいし、構築時に直接実行ファイルにコードをコピーして、プログラムが "スタンドアロン" 。可能性は – Peter

答えて

1

静的および動的(実行時)ライブラリがあります。

コンパイル時に実行可能ファイルに静的ライブラリのコードが格納されます(リンカがこれを行います)。つまり、このコードは実行可能ファイルを膨らませることができますが、すべてのコンピュータに同じコードがあります。

動的ライブラリ(Windowsでは.dll、Linuxでは.so)を使用すると、関数はリンクとして保存されます(ABC.dllからXYZ()を呼び出す)。バイナリを実行すると、OSは実行可能ファイルのアドレス空間にライブラリをロードし、リンクを解決します。したがって、実行可能ファイルは小さく、ライブラリは多くのプログラムで使用できます。このライブラリにバグがある場合は、プログラムごとに1回だけ置き換えなければなりません。しかし、これはライブラリのインターフェイスが慎重に変更された場合にのみ機能します。そうでなければ、DLL地獄へようこそ。

2

まずはという概念:ターゲットプラットフォームで言語機能を提供するために必要なコードです。

つまり、strlenfeclearexceptofstream::operator<<の実装であり、この言語で使用できる他のすべての標準ライブラリ関数です。

また、プログラムの起動時に正しい引数を指定して「main」が呼び出され、ターゲットOSとのやり取りが行われるなど、「グルーコード」が含まれることもあります。多くの概念と同様に


、それは(ファイルなどの物理とすることができます)異なる「物理的」な症状をています。彼らは言語の実装の詳細に依存するが、一般的に以下のとおりです。インライン実装(例えば標準テンプレートLibary)

  • 静的ライブラリ(.objファイルまたは.libファイルが含まれているコンパイル時に利用できる

    • ヘッダファイルは、 )ファイルを作成し、リンク時に実行ファイルにインクルードします。

    • 動的ライブラリ(.dllファイルまたは.soの)実行時に利用できるようにする必要があるファイル

    • 実行可能

    典型的なCを作成するときに、「コンパイラやリンカが行う特別なもの」++プログラムは "すべての上記"を見るかもしれません。

    静的ライブラリは、通常はC、C++または、多くの場合、対象OSのfucntionality(fstreams用などのWindows CreateFile

    動的ライブラリパッケージ(の大部分を使用して、標準ライブラリ関数を実装するアセンブリコードから作成されます).dllまたは.soとしてのこれらの静的ライブラリ。

    ランタイムをターゲットプラットフォームにインストールする必要がありますが、実行可能ファイルのサイズが縮小され、既にインストールされているアプリケーションにはランタイムへの更新のメリットがあります。


    述べたように、これは、実装依存あります。ランタイムに関連付けられ、ランタイムに含まれる追加のファイル(データファイル、設定ファイル、デバッグシンボル、アイコンなど)がいくつでも存在する可能性があります。

    ここで重要なのは、言語がターゲットプラットフォームの抽象化を提供し、抽象化レイヤーがランタイムに実装されていることです。

  • 関連する問題