プログラムを実行するときにcライブラリが必要ですか?

プログラムを実行するときにcライブラリが必要ですか?

実行可能ファイルは機械語コードでなければなりません。

したがって、システムコールを実行するためにCライブラリは必要ありません。

ソースコードから実行可能ファイルを生成する

しかし、この絵がどういう意味なのか理解できませんか?

Cプログラムはprintf()を呼び出します。

ただの抽象的な方法ですか?

ベストアンサー1

ライブラリ関数を呼び出すプログラムがあります。この場合は、「Cライブラリ」とも呼ばれるシステム標準ライブラリです(ただし、Cコードから呼び出すことができる他のライブラリがたくさんあり、これは名前だけです)。 「ライブラリ関数」は、コードが関数の一部として配布される関数を意味する。図書館。プログラムが実行されると、ライブラリ関数は2つの方法で呼び出すことができます。

図書館なら静的リンクつまり、プログラムがビルドされるときの結果は、プログラムmainのソースコード(プログラムの関数や他の関数)とライブラリの関数をコンパイルした結果を含む実行可能ファイルですprintf。リンカーは、または同様の場所と呼ばれるプログラムを実行します。これは、プログラムが構築されたときに「リンカ」ステップが完全に実行され、プログラムの実行/lib/libc.a時にコードが必要ないことを意味します。printfwriteシステムコールライブラリ関数²の代わりに、そのコードはカーネル内にあります。

図書館なら動的リンク、図のリンカステップには実行可能ファイルのライブラリコードは含まれません。それがすることは、プログラムの起動時にライブラリから特定の機能をロードするためのいくつかのガイドラインを満たすことです。実行可能ファイルにはまだ「(Lib ref)」ビットが含まれています。実行可能ファイルの実行時に最初に行うことは、共有ライブラリファイル(/lib/libc.soまたは同様のファイル)をロードし、プログラムに必要な関数名をライブラリが提供する名前と一致させることです。

「抽象的方法」という用語は多少曖昧である。それにこだわらないでください。同じ実行ファイルが異なるライブラリ実装を使用して実行できるため、ダイナミックリンクがライブラリを抽象化すると言うことができます。

図は静的接続を説明しているようです。実際の生活では、ダイナミック接続はマルチプログラミングシステムで最も一般的です。静的リンクには2つの主な欠点があります。ライブラリを使用するすべてのプログラムをアップグレードしないと、ライブラリをアップグレード(バグ修正など)することはできません。多くのプログラムが同じライブラリを使用している場合は、できるだけ多くのコードコピーを保存する必要があります。静的リンクは、単一のプログラムのみを実行し、コードイメージ全体を置き換える必要がある場合にのみアップグレードできる低コストの組み込みシステムに適していますが、動的リンクはさまざまなプログラムを実行するシステムの標準です。

¹ファイル名はシステム上のものよりも複雑になる可能性がありますが、これはこの回答とは関係ありません。
²実際にというライブラリ関数がありますが、writeそれがすることはシステムコールだけです。私の答えでは、私はその名前のシステムコールに言及しています。

おすすめ記事