0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-10-10

はじめに

初めまして、42TokyoでC言語を学んでいる学生です。静的ライブラリと動的ライブラリってどういう違いがあるの?それぞれどんなメリットがあるの?という質問に答えられなかったので、調べました。

静的ライブラリと動的ライブラリの違い

静的ライブラリ

・コンパイル時に実行ファイルに組み込まれるライブラリ
・実行ファイルが単体で動作可能
・通常lib*.aという形式で命名される。

メリット:

・実行時に外部のライブラリを必要としないため、環境に依存しにくい。
・実行速度が速い傾向

デメリット:

・実行ファイルのサイズが大きくなる。
・ライブラリを更新したい場合、実行ファイル自体を再コンパイルしなければならない。
・複数のプログラムで同じライブラリを使用する場合、各実行ファイルに同じコードが重複して含まれてしまう。

動的ライブラリ

・実行時にOSによってロードされるライブラリ
・実行ファイルは、動的ライブラリへの参照を含んだ状態
・lib*.so (Linux) や lib*.dylib (macOS) といった形式で命名される。

メリット:

・実行ファイルのサイズが小さい。
・ライブラリを更新する場合、実行ファイルを再コンパイルせずに、動的ライブラリファイルを置き換えるだけで済む。
・複数のプログラムで同じ動的ライブラリを共有できるため、ディスク容量を節約できる。

デメリット:

・実行時に動的ライブラリが見つからないと、プログラムが正常に動作しない。
・静的ライブラリに比べて、実行時にわずかにオーバーヘッドが発生する可能性がある。

静的ライブラリと動的ライブラリのどちらを選ぶべきか

静的ライブラリを選ぶ場合:

・特定の環境でしか動作しないプログラム
・実行速度を優先したいプログラム
・ライブラリを頻繁に更新しないプログラム

動的ライブラリを選ぶ場合:

・複数のプログラムで共有したいライブラリ
・ライブラリを頻繁に更新する可能性があるプログラム
・実行ファイルのサイズを小さくしたいプログラム

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

静的ライブラリの作成

1.オブジェクトのファイル作成

my_function.cというソースファイルをコンパイルし、オブジェクトファイルmy_function.oを作成します。

gcc -c my_function.c -o my_function.o

2.オブジェクトのファイル作成

my_function.oをアーカイブし、静的ライブラリlibmylib.aを作成する。arはアーカイブを作成するコマンドで、rcsオプションは、ライブラリを作成し、既存のメンバーを置き換えることを意味する。

ar rcs libmylib.a my_function.o

3.プログラムへのリンク

main.cをコンパイルし、libmylib.aをリンクして実行ファイルmainを作成する。-L.オプションは、カレントディレクトリをライブラリ検索パスに追加し、-lmylibオプションは、libmylib.aをリンクすることを意味する。

gcc main.c -L. -lmylib -o main

動的ライブラリの作成

1.オブジェクトのファイル作成

my_function.cというソースファイルをコンパイルし、オブジェクトファイルmy_function.oを作成します。

gcc -c my_function.c -o my_function.o

2.動的ライブラリの作成

my_function.oを共有ライブラリlibmylib.soとして作成する。-sharedオプションは、共有ライブラリを作成することを指定し、-fPICオプションは、位置非依存コードを生成するためのオプションとなる。

gcc -shared -fPIC my_function.o -o libmylib.so

3.プログラムへのリンク

gcc main.c -L. -lmylib -o main

# 余談
C言語でprintf関数を使う時に記述する
#include <stdio.h>
動的ライブラリ?が読み込まれている?それとも静的ライブラリ?が読み込まれている?と疑問に思い、調べてみたら、通常動的ライブラリが読み込まれているみたいですね。
解釈が間違っていたので、削除いたしました。2024/10/11 21:30

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?