なんだかGoodVibes

日々の勉強メモです。

【C】[超入門] 共有ライブラリを作成する

こんにちは。
本日は、C言語メモです。

概要

C言語の共有ライブラリの作成と
共通ライブラリのリンクを方法について記載します。

動作環境はMacなので、
本記事で作成する共有ライブラリの拡張子は
dylibとなります。


共有ライブラリの作成とリンク

以下のディレクトリ構成とします。

include
 ┗ calc.h
common
 ┗ calc_add.c
myapp
 ┗ main.c

各ファイルの内容は以下です。

  • calc.h
#ifndef CALC_H
#define CALC_H

extern void add(int num1, int num2);

#endif // CALC_H
  • calc_add.c
#include <stdio.h>

void add(int num1, int num2) {
    int result = 0;
    result = num1 + num2;

    printf("%d + %d = %d\n", num1, num2, result);
}
  • main.c
#include "calc.h"

int main() {

    add(100, 200);
    return 0;
}
共通ライブラリの作成

common配下のソースから共有ライブラリを作成します。

$ gcc -fPIC -c calc_add.c -I../include
$ ls
calc_add.c calc_add.o
$ gcc -shared -o libmyapp.dylib calc_add.o 
$ ls
calc_add.c     calc_add.o     libmyapp.dylib
共有ライブラリをリンクする

myapp配下のソースをコンパイルして先ほど作成した
共有ライブラリをリンクします。

共有ライブラリはmyappの配下に移動した状態とします。

$ gcc -c main.c -I../include
$ ls
libmyapp.dylib main.c         main.o
$ gcc -o main main.o -I../include -L. -lmyapp 
$ ls
libmyapp.dylib main           main.c         main.o
$ ./main 
100 + 200 = 300


macの場合、共有ライブラリの標準的な配置場所は
/usr/local/libとなっています。
この場所に配置した場合は、-Lの指定は不要となります。

$ ls /usr/local/lib/libmyapp.dylib 
/usr/local/lib/libmyapp.dylib
$ gcc -o main main.o -I../include -lmyapp 
$ ls
main   main.c main.o
$ ./main 
100 + 200 = 300



以上です。