カテゴリ: C言語 更新日: 2025/12/09

C言語の静的ライブラリと動的ライブラリの作り方をやさしく解説!初心者でも理解できるビルドの基本

C言語の静的ライブラリと動的ライブラリの作り方
C言語の静的ライブラリと動的ライブラリの作り方

先生と生徒の会話形式で理解しよう

生徒

「C言語のプログラムが増えてきて、毎回コンパイルするのが大変になってきました。もっと楽になる方法はありませんか?」

先生

「そんな時に役立つのが静的ライブラリと動的ライブラリです。共通の処理をライブラリにしておけば、何度も同じソースをコンパイルする必要がありません。」

生徒

「ライブラリって難しそうな印象があります。C言語初心者でも作れますか?」

先生

「とても簡単です。実際の例を使いながら、静的ライブラリと動的ライブラリの作り方を見ていきましょう。」

1. ライブラリとは何か

1. ライブラリとは何か
1. ライブラリとは何か

C言語のライブラリとは、共通で使われる処理をまとめた部品のようなものです。よく使う計算や文字列の処理をまとめることで、毎回同じソースコードを書く手間がなくなります。ライブラリには大きく分けて静的ライブラリと動的ライブラリがあります。

静的ライブラリは、プログラムに中身が取り込まれる方式です。反対に動的ライブラリは、プログラム実行中に読み込まれる仕組みです。名前は難しく聞こえますが、理解してしまえばとても簡単で便利な技術です。

2. 静的ライブラリとは

2. 静的ライブラリとは
2. 静的ライブラリとは

静的ライブラリは、コンパイル時に実行ファイルへ組み込まれるライブラリです。ライブラリが含まれた実行ファイルだけで動くため、配布が簡単という特徴があります。例えば、電卓の機能を作っておき、必要なプログラムに組み込んで使うことができます。

静的ライブラリの拡張子は.aです。Linux環境で作成でき、初心者でも扱いやすい形式です。

3. 静的ライブラリの作り方

3. 静的ライブラリの作り方
3. 静的ライブラリの作り方

まずはライブラリにしたいソースコードとヘッダーファイルを用意します。


// math.c
int add(int a, int b) {
    return a + b;
}

// math.h
int add(int a, int b);

次に、コンパイルしてオブジェクトファイルを作成します。


gcc -c math.c

続いて、オブジェクトファイルをまとめて静的ライブラリにします。


ar rcs libmath.a math.o

こうして作ったlibmath.aを他のプログラムで利用できます。

4. 静的ライブラリを使う

4. 静的ライブラリを使う
4. 静的ライブラリを使う

次にmain.cを作成し、先ほど作った静的ライブラリを使います。


// main.c
#include <stdio.h>
#include "math.h"

int main() {
    int result = add(3, 5);
    printf("%d\n", result);
    return 0;
}

静的ライブラリを指定してコンパイルします。


gcc main.c libmath.a -o sample

実行すると、結果が表示されます。


8

5. 動的ライブラリとは

5. 動的ライブラリとは
5. 動的ライブラリとは

動的ライブラリは、実行中に読み込まれるライブラリです。拡張子は.soです。特徴として、ライブラリを共有できるため、複数のプログラムで同じ処理を使うときに便利です。実行ファイルが小さくなるというメリットがあります。

6. 動的ライブラリの作り方

6. 動的ライブラリの作り方
6. 動的ライブラリの作り方

静的ライブラリと同じソースコードを使って作りますが、コンパイルの方法が少し異なります。


gcc -fPIC -c math.c
gcc -shared -o libmath.so math.o

これで動的ライブラリlibmath.soが作成されます。

7. 動的ライブラリを使う

7. 動的ライブラリを使う
7. 動的ライブラリを使う

動的ライブラリを使う場合、ライブラリの場所を指定してコンパイルします。


gcc main.c -L. -lmath -o sample

実行時にライブラリを読み込むため、環境変数を設定します。


export LD_LIBRARY_PATH=.

あとは実行するだけです。


8

静的ライブラリとの違いは、実行ファイルにライブラリの中身を含めず、必要な時に読み込む点です。プログラムの容量を減らすことができ、効率的な仕組みといえます。

8. よく使う場面を考えてみよう

8. よく使う場面を考えてみよう
8. よく使う場面を考えてみよう

静的ライブラリは配布が簡単で、実行ファイルだけで動きます。一方、動的ライブラリは複数のソフトが同じ処理を共有できる便利な仕組みです。例えば、文字コード変換、画像処理、暗号化など、様々なソフトで共通する処理を動的ライブラリにまとめて管理できます。

ライブラリを使うことで、C言語の開発が少しずつ効率的になります。ファイルが増えて混乱しやすい大きなプログラムでも、共通部分を整理できるため、初心者が覚えておくと役立ちます。

まとめ

まとめ
まとめ

C言語で静的ライブラリと動的ライブラリを作成する手順を通して、ライブラリという概念がとても重要であることが理解できます。静的ライブラリはプログラム本体に組み込まれて単体で動作し、動的ライブラリは実行時に読み込まれて複数のプログラムから共有できるという利点があります。どちらもC言語の開発で欠かせない仕組みであり、規模の大きい開発になるほど効果を発揮します。特に共通処理をひとつにまとめて再利用する考え方は、プログラムの見通しを良くし、管理の手間を大幅に減らすため、初心者のうちから意識して活用していくことが大切です。 また、実際にgccコマンドでコンパイルし、ar rcs libmath.a のように静的ライブラリを作成する工程や、gcc -shared -o libmath.so のように動的ライブラリを生成する工程を経験することで、ライブラリがどのように構築されているかを具体的に理解できます。学んだ内容は、計算処理や文字列処理などの基本的な部品化はもちろん、画像処理、暗号化、データ解析などの高度な分野にも応用できます。ファイルを整理し、機能ごとにライブラリ化していくことで、プログラム全体の保守性や拡張性が高まり、効率のよい開発へとつながります。

サンプルプログラムで理解を深める

ここでは記事と同じ形式で、ライブラリを活用するサンプルを改めて整理しておきます。静的ライブラリと動的ライブラリの違いを確認しながら、再利用しやすいコード構造を意識して学んでいきましょう。


// util.c
#include <stdio.h>

void print_message(const char* text) {
    printf("メッセージ: %s\n", text);
}

// util.h
void print_message(const char* text);

静的ライブラリとしてまとめる場合は次のようになります。


gcc -c util.c
ar rcs libutil.a util.o

動的ライブラリを作成するならこちらです。


gcc -fPIC -c util.c
gcc -shared -o libutil.so util.o

このように静的と動的のどちらも、共通処理を分離して整理することで、C言語での開発をとても効率よく進められるようになります。プログラムが大きくなればなるほどライブラリ化が役に立つため、ぜひ積極的に活用してみてください。

先生と生徒の振り返り会話

生徒

「今日学んだ静的ライブラリと動的ライブラリの違いがだいぶ分かってきました。特に同じ処理を繰り返し書く必要がなくなるのは便利だと思いました。」

先生

「その通りです。C言語では、共通部分をライブラリにまとめることで作業効率が大きく変わります。プログラムが増えるほど効果が大きくなりますよ。」

生徒

「静的ライブラリは配布しやすくて、動的ライブラリは共有しやすいという特徴も覚えました。使い分けることで便利になりますね。」

先生

「ええ、場面に応じて使い分けられればもう初級者卒業です。これからもっと複雑な処理もライブラリとしてまとめられるので、ぜひ応用していきましょう。」

生徒

「はい!実際に自分のプログラムでも分割して整理してみます!」

関連記事:
カテゴリの一覧へ
新着記事
New1
C++
C++の変数のスコープと有効範囲を完全解説!初心者でもわかる基本と考え方
New2
C++
C++とは?歴史と特徴を初心者向けに解説!Rustとの違いとモダン言語比較
New3
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド
New4
Rust
Rust開発環境をLinuxで構築する方法とおすすめ設定を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.2
Java&Spring記事人気No2
C言語
C言語の関数定義と呼び出しを完全ガイド!初心者でも分かる基本の書き方
No.3
Java&Spring記事人気No3
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.4
Java&Spring記事人気No4
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.5
Java&Spring記事人気No5
C言語
Makefile入門:C言語プロジェクトを自動ビルドしよう!初心者でも分かる仕組みと使い方
No.6
Java&Spring記事人気No6
C言語
C言語の開発環境をWindowsに構築する方法【Visual Studio編】
No.7
Java&Spring記事人気No7
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.8
Java&Spring記事人気No8
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド