こんにちは。
本日は、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
以上です。