共有ライブラリ

提供: MacWiki
移動: 案内検索

はじめに[編集]

プログラミングにおいて、パフォーマンスに重要な要因に、起動時間とメモリ管理がある。静的ライブラリと動的ライブラリを比較すると、動的ライブラリの方が、起動時間やファイルサイズなどで利点が多く、広く使われている。

Linux との違い[編集]

このページを見る人の多くは、Linux との違いに困っている人だろう。ここでは、Linux との違いをまとめる。

  • ldconfig は存在しない。Linux では、起動時に共有ライブラリを探すが、Mac では、ビルド時にフルパスまたは相対パスを指定することが多いためである。これは、
$ otool -L /usr/lib/lib*.dylib

としてみるとわかる。

コンパイル[編集]

リンク時に symbol undefined エラーが出る場合、

  1. ライブラリのあるディレクトリを LDFLAGS に追加する。例えば、-L/sw/lib
  2. ライブラリを LDFLAGS に追加する。例えば、libfoo.dylib の場合は -lfoo
  3. 上記でライブラリを適切に指定しているにもかかわらずエラーが出る場合は、LDFLAGS に -undefined suppress -flat_namespace オプションを追加する。

ツール[編集]

otool[編集]

object file displaying tool です。

$ otool -L /path/to/libfoo.dylib

とすると、ライブラリ名とリンクしている共有ライブラリが表示されます。

nm[編集]

シンボルテーブルを表示します。

install_name_tool[編集]

動的共有ライブラリとインストール名を変更します。

$ install_name_tool -id "/path/to/newname.dylib" /path/to/libfoo.dylib

とすることで、その動的共有ライブラリのインストール名を変えることができます。


$ install_name_tool -change "/path/to/libold.dylib"  "/path/to/libnew.dylib" /path/to/libfoo.dylib

とすることで、リンクしている動的共有ライブラリを変えることができます。

外部リンク[編集]