「共有ライブラリ」の版間の差分
提供: MacWiki
(→Linux との違い) |
細 (→外部リンク) |
||
行33: | 行33: | ||
== 外部リンク == | == 外部リンク == | ||
− | * [https://developer.apple.com/library/mac/documentation/developertools/conceptual/dynamiclibraries/100-Articles/OverviewOfDynamicLibraries.html Overview of Dynamic Libraries | + | * [https://developer.apple.com/library/mac/documentation/developertools/conceptual/dynamiclibraries/100-Articles/OverviewOfDynamicLibraries.html Overview of Dynamic Libraries] |
* [http://fink.thetis.ig42.org/doc/packaging/policy.php?phpLang=ja#sharedlibs 共有ライブラリ] | * [http://fink.thetis.ig42.org/doc/packaging/policy.php?phpLang=ja#sharedlibs 共有ライブラリ] |
2013年9月15日 (日) 11:33時点における版
はじめに
プログラミングにおいて、パフォーマンスに重要な要因に、起動時間とメモリ管理がある。静的ライブラリと動的ライブラリを比較すると、動的ライブラリの方が、起動時間やファイルサイズなどで利点が多く、広く使われている。
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
とすることで、リンクしている動的共有ライブラリを変えることができます。