ランタイムライブラリ
C言語ではmain関数を実行した直後、<stdio.h>に定義されたstdoutを参照すると標準出力のファイルポインタを得ることができる。また、main関数の引数を参照すればコマンドライン引数の文字列を参照することができる。これらはオペレーティングシステム (OS) やコンパイラが初期化しているものではなく、main関数を呼び出している関数が更に存在しその中に「スタートアップルーチン」とよばれる初期化処理と解放処理が存在しているからである。また、putsといった標準ライブラリの関数はランタイムライブラリの中に実装されているため、別途明示的なリンク指定をすることなくヘッダーの#includeをするだけで使うことができる。これらのスタートアップルーチンや標準関数といった、言語に必要な標準的機能を提供するライブラリがランタイムライブラリである。
CランタイムライブラリはシステムコンポーネントとしてOSに標準搭載されていることもある。GNU CライブラリからフォークしたLinux libc、AndroidのBionic libc(英語版)、Microsoft Windows 10のUniversal CRTなどがある。
といったものがある。
ランタイムライブラリは、同じシリーズのコンパイラでも異なるバージョン間でバイナリ互換性がないこともあり、動的リンク形式のモジュールに関してはバージョンに応じた名前を付けるなどして、side-by-sideで管理されていることがある。その場合はプログラムのビルドに使用したコンパイラに対応するバージョンの共有ランタイムライブラリが必要になる。また、バイナリ互換性がない場合にモジュール境界を越えてオブジェクトをやりとりすると未定義の問題が生じる。
再配布先のコンピュータにインストールされている共有ランタイムライブラリのバージョンが一致しない場合の対策としては、ランタイムライブラリを静的リンクする方法や、プライベートモジュールとしてアプリケーションのパッケージに同梱する方法がある。確実な方法ではあるが、ランタイムライブラリにセキュリティホール(脆弱性)が見つかった場合、共有ランタイムライブラリであればOSのセキュリティパッチ(脆弱性対策)によって更新される一方、ランタイムライブラリを静的リンクしたりプライベートモジュールとして再配布したりしてしまうと、その恩恵を受けられないという欠点もある。