理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

Shared Libraries

共有ライブラリは、アーカイブとよく似ているが、いくつかの重要な違いがある。

  • 共有ライブラリをリンクした実行ファイルには共有ライブラリのコードは含まれず、参照のみを含む
  • アーカイブのようにオブジェクトファイルをグルーピングしたものではなく、1 つのオブジェクトファイルである (共有ライブラリを構成するオブジェクトファイルが、1 つのオブジェクトファイルにまとめられる)

共有ライブラリを作成する場合は、まずコンパイラに -fPIC オプションを指定し、再配置可能なオブジェクトファイルを作成する。

$ gcc -c -fPIC test.c

そうしてできたオブジェクトファイルを、1 つの共有ライブラリにする。

$ gcc -shared -fPIC -o app libtest.so test.o

リンクについては、アーカイブをリンクするときと変わらない。これによって、libtest.so がリンクされていることがわかる。

$ gcc -o app app.o -L. -ltest
$ otool -L app                                                                                                                             [~/work/test]
app:
        libtest.so (compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0)