「共有ライブラリ」の版間の差分

提供: MacWiki
移動: 案内検索
(はじめに)
(Linux との違い)
行5: 行5:
 
このページを見る人の多くは、Linux との違いに困っている人だろう。ここでは、Linux との違いをまとめる。
 
このページを見る人の多くは、Linux との違いに困っている人だろう。ここでは、Linux との違いをまとめる。
  
* ldconfig は存在しない。dyld を使わず、dlopen を使っている。Linux では、起動時に共有ライブラリを探すが、Mac では、ビルド時にフルパスまたは相対パスを指定することが多いためである。これは、
+
* ldconfig は存在しない。Linux では、起動時に共有ライブラリを探すが、Mac では、ビルド時にフルパスまたは相対パスを指定することが多いためである。これは、
 
  $ otool -L /usr/lib/lib*.dylib
 
  $ otool -L /usr/lib/lib*.dylib
 
としてみるとわかる。
 
としてみるとわかる。

2013年9月15日 (日) 11:30時点における版

はじめに

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

Linux との違い

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

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

としてみるとわかる。

コンパイル

ライブラリを適切に指定しているにもかかわらずリンク時に symbol undefined エラーが出る場合、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

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

外部リンク