共有ライブラリ(Dynamic Library)とはプログラムの実行時に動的ロード(Dynamic Loading)によってリンクされるライブラリーである。
void test(char *s)
{
printf("test : %s", s);
}
このプログラム(test.c)を共有ライブラリ(libtest.so.1.0)にするには、以下の手順で行う。
# gcc -fPIC -c test.c # gcc -shared -Wl,-soname,libtest.so.1 -o libtest.so.1.0 test.o # ln -s libtest.so.1.0 libtest.so.1オプションの-sonameによってlibtest.so.1という名前でもロードできるようにしている。
#include
#include
main()
{
void *libtest;
void (*test_call)();
if((libtest = dlopen("/home/user/lib/libtest.so.1.0", RTLD_LAZY)) != NULL)
{
test_call = dlsym(libtest, "test");
(*test_call)("Hello World\n");
}
}
dlopenによってロードされるライブラリ名が/ (スラッシュ)で始まらない場合は、以下の順番でライブラリを探す。
# gcc -o testlib testlib.c -ldl
# ./testlib test : Hello World #