共有ライブラリの作り方(Linux)

共有ライブラリとは

共有ライブラリ(Dynamic Library)とはプログラムの実行時に動的ロード(Dynamic Loading)によってリンクされるライブラリーである。

例1

  1. 共有ライブラリを作る
    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という名前でもロードできるようにしている。
  2. 共有ライブラリをリンクするプログラム(testlib.c)
    #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によってロードされるライブラリ名が/ (スラッシュ)で始まらない場合は、以下の順番でライブラリを探す。
    1. 環境変数LD_LIBRARYに設定されたディレクトリ
    2. /etc/ld.so.cacheに登録されているライブラリ(ldconfigでつくられたもの)
    3. /usr/libと/lib
  3. 共有ライブラリをリンクするプログラムのコンパイル方法
    # gcc -o testlib testlib.c -ldl
    
  4. プログラムの実行
    # ./testlib
    test : Hello World
    #
    

参考


Home | Contents
Mail