linuxとC スタティックリンクライブラリ

Linux + C
スタティックリンクライブラリ コンパイル時にコードが組み込まれる
ダイナミックリンク プログラムの実行時にロードされる
ダイナミックロード 自分でロードして自分で呼び出す

その1 スタティックリンクライブラリ

○staticlinklib.h

#ifndef _STATICLINKLIB_
#define _STATICLINKLIB_
int hello(char *name);
#endif

○staticlinklib.c

#include <stdio.h>
int hello(char *name)
{
    printf("%s hello!!\n",name);
    return 0;
}

○staticlinklib2.h

#ifndef _STATICLINKLIB2_
#define _STATICLINKLIB2_
int hello(char *name);
#endif

○staticlinklib2.c

#include <stdio.h>
int hello2(char *name)
{
    printf("%s hello hello\n",name);
}

○main.c

#include <stdio.h>
#include "staticlinklib.h"
#include "staticlinklib2.h"

int main(int argc,char **argv)
{
    hello("a");
    hello2("b");
    return 0;
}

で、

gcc -c staticlinklib.c
gcc -c staticlinklib2.c

gcc -cでオブジェクトファイルを出力

ar r staticlinklib.a staticlinklib.o staticlinklib2.o

ar で書庫をつくる(rオプションで同名ファイルは置換)

ranlib staticlinklib.a

ranlib で書庫のインデックスを作成

gcc -o main main.c staticlinklib.a 

./main
本体のコンパイル。